自定义操作栏未填满父容器

4

自定义动作栏未填满父元素。

我正在使用自定义动作栏来实现导航抽屉功能。 但是我的动作栏在左侧保留了一些空间。

我使用的代码如下。

// to inflate custom view

            LayoutInflater inflator=   (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v=inflator.inflate(R.layout.custom_action_top_bar, null);
            getActionBar().setHomeButtonEnabled(false);
            getActionBar().setDisplayShowTitleEnabled(false);
            getActionBar().setDisplayShowCustomEnabled(true);
            getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
            getActionBar().setCustomView(v);

            View v1 = getActionBar().getCustomView();
            LayoutParams lp = (LayoutParams) v1.getLayoutParams();
            lp.width = LayoutParams.FILL_PARENT;
            v1.setLayoutParams(lp);

这是用于参考的action_custom_action_top_bar文件

这个xml文件包含一个主线性布局,左右两侧分别有用于打开两侧抽屉的imageview。但是在操作栏的左侧出现了多余的空间,有谁能帮我解决一下?

这是我使用的自定义操作栏,我为操作栏设置了一些背景颜色,并为每个侧面添加了两个图像以用于抽屉。

   <LinearLayout                 
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:orientation="horizontal"
        android:weightSum="1.0" >

        <ImageView
            android:id="@+id/IV_leftIcon"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".2"
            android:background="@color/light_green"
            android:src="@drawable/header_menu_btn" />

        <TextView
            android:id="@+id/actionText"
            style="@style/action_bar_top_text_size"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".6"
            android:background="@color/light_green"
            android:drawableRight="@drawable/header_dropdown_arrow"
            android:gravity="center"
            android:text="Sample"
            android:textColor="@color/white" />

        <ImageView
            android:id="@+id/IV_rightIcon"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".2"
            android:background="@color/light_green"
            android:src="@drawable/plus_btn" />

    </LinearLayout>

嘿AmaJayJB,请查看我最近发布的XML文件。 - Vijay
移除重心,使宽度匹配父容器。 - Mina Fawzy
将linearLayout改为RelativeLayout。 - Mina Fawzy
尝试从根LinearLayout中删除android:layout_gravity="center"属性。 - user
我同意移除layout_gravity="center",但我不会自动更改为RelativeLayout。你看过新的设计库吗?它在设置操作栏方面非常有用。此外,我建议使用supportActionBar而不是actionBar。 - AmaJayJB
显示剩余2条评论
2个回答

11

如何使操作栏填满宽度

更新的答案

在根线性布局中删除android:layout_gravity="center",让高度为wrap_content。

<LinearLayout                 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:orientation="horizontal"
        android:weightSum="1.0" > 

      ......
</LinearLayout>

建议在默认情况下使用getSupportActionBar(),因为activity继承了ActionBarActivity

import android.support.v7.app.ActionBar.LayoutParams;
import android.support.v7.widget.Toolbar;


public class MainActivity extends ActionBarActivity {



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


      getSupportActionBar().setHomeButtonEnabled(false);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setDisplayShowCustomEnabled(true);
    getSupportActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));



    LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT);
    getSupportActionBar().setCustomView(v, layoutParams);
    Toolbar parent = (Toolbar) v.getParent();
    parent.setContentInsetsAbsolute(0, 0);

}
}

摘要

我理解您的问题,您正在使用带有旧支持库的Eclipse,该支持库不支持ToolBar,请使用appcompat-v21或更高版本。

我的建议是,使用Android Studio,因为他们停止支持Eclipse。

这段代码工作正常,是概念的证明。

enter image description here


我试过了...结果还是一样...你能给我你的邮箱吗...这样我就可以把它发送给你。 - Vijay
mina fawzy...感谢您的回复...但是工具栏父级需要API级别21....我们将最小SDK版本设置为14....所以这对我们不起作用。 - Vijay
我会通过邮件发送代码给你,请帮忙,谢谢。 - Vijay
支持库v7 appcompat-v21,使用Android Studio。 - Mina Fawzy
有人知道为什么SherlockFragmentActivity无法解析onCreate方法吗? - Vijay

5

只需将这两行代码添加到您的工具栏 XML 代码中即可:

app:contentInsetStart="0dp"
app:contentInsetEnd="0dp"

它将解决您的问题。

这是我的工作代码:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    app:contentInsetStart="0dp"
    app:contentInsetEnd="0dp">
    <include layout="@layout/your_custom_toolbar_layout"/>
</android.support.v7.widget.Toolbar>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接