在操作栏中填充水平自定义视图

时间:2015-08-05 16:12:33

标签: android android-actionbar

我想显示在我的操作栏上使用完全覆盖操作栏的自定义视图(宽度匹配父级)

  

但我的自定义视图不会覆盖操作栏的整个宽度。

enter image description here

public class MyActivity extends AppCompatActivity {

    private ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.data_entry_screen);
        setActionBar();
    }

    private void setActionBar() {
        actionBar = getSupportActionBar();
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        View abView = actionBar.getCustomView();
        LayoutInflater inflator = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LayoutParams layout = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        View v = inflator.inflate(R.layout.action_bar, null);
        actionBar.setCustomView(v, layout);
        actionBar.setDisplayShowCustomEnabled(true);
    }

action_bar.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="match_parent"
    android:layout_gravity="fill_horizontal">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/mvp_logo"
        android:layout_alignParentRight="true" />

</RelativeLayout>

我已经提到了以下链接:

How to display custom view in ActionBar?

Manually inflating custom view yields different layouts for ActionBar custom view

Android center custom view in actionbar

Android: How to center a component in a custom view in action bar?

由于

1 个答案:

答案 0 :(得分:1)

Toolbar对您来说可能更好,但作为一个注释,这违反了设计准则,并会使您的应用不适合&#39;在Android生态系统中,该区域通常是找到上下文菜单的地方,大多数用户都会学习这种行为。

您可以通过删除内容插入来修复此行为,如下所示

View myLogo = mInflater.inflate(R.layout.actionbar_custom, null);
getSupportActionBar().setCustomView(myLogo);
((Toolbar) myLogo.getParent()).setContentInsetsAbsolute(0,0);

如果您已更改为工具栏,则可以在自定义视图的XML中修复它

app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"