导航栏不够宽

时间:2019-05-02 14:05:09

标签: c# xamarin.android

我有问题。我使用以下代码创建了menu_bar.axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="75dp"
    android:weightSum="100"
    android:background="#071c3f">
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="15"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/StatusImageLayout"
        android:clickable="false">
        <ImageView
            android:src="@drawable/disconnected"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:minWidth="25px"
            android:minHeight="25px"
            android:id="@+id/imgConnectionStatus"
            android:foregroundGravity="center_horizontal"
            android:layout_marginLeft="1dp" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="70"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/ProjectNameLayout" >
        <TextView
            android:text="Project Name"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:minWidth="25px"
            android:minHeight="25px"
            android:id="@+id/txtProjectName"
            android:gravity="center"
            android:textStyle="bold"
            android:textSize="30dp"
            android:textColor="#ffffffff" 
            android:layout_marginLeft="3dp"
            android:layout_marginRight="3dp"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="15"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/SettingsButtonLayout" >
        <ImageView
            android:src="@drawable/settings"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:minWidth="25px"
            android:minHeight="25px"
            android:id="@+id/imgSettingsLogo"
            android:foregroundGravity="center_horizontal"
            android:layout_marginRight="1dp"/>
    </LinearLayout>
</LinearLayout>

然后我创建了这样的自定义样式:

<resources>
  <style name="MyAppTheme">
          parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MenuBar</item>
  </style>

  <style name="MenuBar"
         parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:height">75dp</item>
    <item name="android:displayOptions"></item>
    <item name="android:background">#00000000</item>
  </style>
</resources>

最后在MainActivity.cs中,将这些行设置为OnCreate()

ActionBar.SetCustomView(Resource.Layout.menu_bar);
ActionBar.SetDisplayShowCustomEnabled(true);

现在,菜单栏会像我想要的那样弹出(几乎),但是导航栏的宽度不足以容纳屏幕。我不知道它从哪里来,我也不知道如何摆脱它。这是我的屏幕的链接:

My app screen

有什么办法解决这个问题或我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

您可以在动作栏中看到源代码(由于最近的appcompat-v7更新中对动作栏的最新更改所致)

<style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget"> 
 <item name="titleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Title</item> 
 <item name="subtitleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle</item> 
 <item name="android:minHeight">?attr/actionBarSize</item> 
 <item name="titleMargins">4dp</item> 
 <item name="maxButtonHeight">56dp</item> 
 <item name="collapseIcon">?attr/homeAsUpIndicator</item> 
 <item name="collapseContentDescription">@string/abc_toolbar_collapse_description</item> 
 <item name="contentInsetStart">16dp</item> 
</style>

<item name="contentInsetStart">16dp</item> contentInsetStart属性是导致自定义ActionBar无法完全填充的原因

,从Android L(API级别21)开始,操作栏可以由应用程序布局内的任何工具栏小部件表示 ,所以简单的解决方法如下:

ActionBar.SetCustomView(Resource.Layout.menu_bar);
ActionBar.SetDisplayShowCustomEnabled(true);
((Toolbar)ActionBar.CustomView.Parent).SetContentInsetsAbsolute(0,0);//add this line to remove the left margin