ActionBar CustomView 不会居中
ActionBar CustomView won't be centered
我有一些具有不同 actionBar 布局的屏幕,并尝试将每个 actionBar 的标题居中。这是我的布局:
actionbar_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:text="Control"
android:textColor="@color/fragment_title_font"
android:id="@+id/fragmentTitle"
android:textSize="14sp" />
<com.joanzapata.iconify.widget.IconButton
android:id="@+id/buttonActionbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:visibility="gone"
android:background="@drawable/button_actionbar"
android:text=""
android:singleLine="true"
android:textColor="#ffffffff"
android:textSize="12sp"/>
</RelativeLayout>
这是显示我的自定义 actionBar 的代码:
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
LayoutInflater mInflater = LayoutInflater.from(context);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.MATCH_PARENT,
Gravity.CENTER
));
如果屏幕没有右键只有左边的UpButton,看起来没问题:
如果屏幕没有左边的UpButton但右边的按钮,它看起来也很好:
但是如果我想同时设置两者,我的标题就不会居中了:
是否可以在所有情况下将我的标题居中?
编辑:@tynn 的建议仅适用于我的第三个案例。总比没有好,谢谢!
你试过改变这个吗:
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.MATCH_PARENT,
Gravity.CENTER));
对此:
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT));
您的标题在所有案例中都居中,只是按钮重叠。如果您想使 TextView
相对于按钮居中,您需要相对于按钮进行布局定义,而不是相对于 parent 布局将其居中。
使用 LinearLayout
实现目标的一种可能方法(使用 RelativeLayout
应该很简单,但有点冗长)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/fragmentTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="Control"
android:textColor="@color/fragment_title_font"
android:textSize="14sp" />
<com.joanzapata.iconify.widget.IconButton
android:id="@+id/buttonActionbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:visibility="gone"
android:background="@drawable/button_actionbar"
android:text=""
android:singleLine="true"
android:textColor="#ffffffff"
android:textSize="12sp"/>
</LinearLayout>
如果你这样做,不应该明确设置 LayoutParams
,如果你不使用 ActionBar.LayoutParams.WRAP_CONTENT
作为宽度
actionBar.setCustomView(R.layout.actionbar_layout);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
我有一些具有不同 actionBar 布局的屏幕,并尝试将每个 actionBar 的标题居中。这是我的布局:
actionbar_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:text="Control"
android:textColor="@color/fragment_title_font"
android:id="@+id/fragmentTitle"
android:textSize="14sp" />
<com.joanzapata.iconify.widget.IconButton
android:id="@+id/buttonActionbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:visibility="gone"
android:background="@drawable/button_actionbar"
android:text=""
android:singleLine="true"
android:textColor="#ffffffff"
android:textSize="12sp"/>
</RelativeLayout>
这是显示我的自定义 actionBar 的代码:
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
LayoutInflater mInflater = LayoutInflater.from(context);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.MATCH_PARENT,
Gravity.CENTER
));
如果屏幕没有右键只有左边的UpButton,看起来没问题:
如果屏幕没有左边的UpButton但右边的按钮,它看起来也很好:
但是如果我想同时设置两者,我的标题就不会居中了:
是否可以在所有情况下将我的标题居中?
编辑:@tynn 的建议仅适用于我的第三个案例。总比没有好,谢谢!
你试过改变这个吗:
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.MATCH_PARENT,
Gravity.CENTER));
对此:
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT));
您的标题在所有案例中都居中,只是按钮重叠。如果您想使 TextView
相对于按钮居中,您需要相对于按钮进行布局定义,而不是相对于 parent 布局将其居中。
使用 LinearLayout
实现目标的一种可能方法(使用 RelativeLayout
应该很简单,但有点冗长)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/fragmentTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="Control"
android:textColor="@color/fragment_title_font"
android:textSize="14sp" />
<com.joanzapata.iconify.widget.IconButton
android:id="@+id/buttonActionbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:visibility="gone"
android:background="@drawable/button_actionbar"
android:text=""
android:singleLine="true"
android:textColor="#ffffffff"
android:textSize="12sp"/>
</LinearLayout>
如果你这样做,不应该明确设置 LayoutParams
,如果你不使用 ActionBar.LayoutParams.WRAP_CONTENT
作为宽度
actionBar.setCustomView(R.layout.actionbar_layout);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);