2016-01-27 36 views
1

我在我的导航抽屉中使用支持NavigationView来显示项目菜单。将ActionView设置为支持NavigationView中的项目不显示

<android.support.design.widget.NavigationView 
    android:id="@+id/drawer_navigation" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@drawable/drawable_background" 
    app:headerLayout="@layout/drawer_header" 
    app:itemBackground="@drawable/drawer_item_background" 
    app:itemIconTint="@color/drawer_item" 
    app:itemTextColor="@color/drawer_item" 
    app:menu="@menu/drawer" 
    app:theme="@style/Text.DrawerItem"/> 

我想显示菜单项旁边的连接请求计数器。

我试图设置actionLayout在XML菜单定义这样

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <group android:checkableBehavior="single"> 
    ... 
    <item 
     android:id="@+id/navigation_requests" 
     android:icon="@drawable/ic_swap_horiz_24dp" 
     android:title="@string/connect_menu_connection_requests" 
     app:actionLayout="@layout/connection_request_counter" 
     app:showAsAction="always"/> 
    ... 
    </group> 
</menu> 

connection_request_counter.xml的ActionView

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:textColor="@color/brand_blue" 
     android:text="5"/> 

的布局,但在这一点上,我不能看到5号旁该项目。

我试图设置ActionLayout编程方式,以及:

MenuItemCompat.setActionView(mMenu.findItem(R.id.navigation_requests), R.layout.connection_request_counter); 

但仍没有运气。

我可以参考的TextView像

final TextView connectionRequestCounterView 
      = (TextView) MenuItemCompat.getActionView(mMenu.findItem(R.id.navigation_requests)); 

这实际上返回一个TextView实例,但即使我设置文本给它,我不能看到任何布局。这可能与我正在设计菜单项目的事实有关吗? (我设置文本颜色,色调和背景的菜单项)

这里是我的风格:

<style name="Text.DrawerItem"> 
    <item name="android:textColor">@color/text_color_dark_grey</item> 
    <item name="android:textSize">@dimen/text_size_default</item> 
    <item name="android:clickable">false</item> 
    <item name="android:textColorLink">@color/text_color_dark_grey</item> 
    <item name="fontPath">@string/font_aller_light</item> 
    <!--<item name="android:background">@color/background_activity_default</item>--> 
    <!--<item name="background">@color/background_activity_default</item>--> 
</style> 

drawer_item_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!--To override the default grey background for selected item--> 
    <item android:drawable="@android:color/transparent" android:state_checked="true"/> 
    <item android:drawable="@android:color/transparent"/> 
</selector> 

drawer_drawablbe.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/background_activity_default"/> 
    </shape> 
    </item> 
    <item 
    android:bottom="24dp" 
    android:left="16dp"> 
     <bitmap 
     android:gravity="left|bottom" 
     android:src="@drawable/my_drawer_logo"/> 
    </item> 

</layer-list> 

在哪里@drawable/my_drawer_logo是一个不同密度的PNG。

任何其他想法为什么我不能看到动作视图?

+0

我试图重新创建问题,但是我没有运行代码的问题。你可以分享'@ style/Text.DrawerItem'吗? – OYRM

+0

事实上,继续创建这个问题没有成功,你可以使用“@ drawable/drawer_item_background”和“@ drawable/drawable_background”吗? – OYRM

+0

@OYRM非常感谢您的关注。我已经发布了我的样式和背景可绘画。但是,我试图删除背景drawables并没有帮助。 –

回答

1

我终于找出是什么原因导致了这个问题。 对于NavigationView与行动的意见正常工作,您必须使用程序兼容性支持库版本23.1

所以不是

compile 'com.android.support:appcompat-v7:22.3.0' 

我不得不更新到

compile 'com.android.support:appcompat-v7:23.1.1' 

这使的伎俩和导航抽屉导航视图中的操作视图开始正确显示,完全按照我的意愿显示。


更新到我遇到几个问题来了,如同ClassNotFoundException新程序兼容性版本显示启动的应用程序,这是我固定通过更新所有com.android.support库最新版本的时候了:

compile 'com.android.support:appcompat-v7:23.1.1' 
compile 'com.android.support:design:23.1.1' 
compile 'com.android.support:recyclerview-v7:23.1.1' 
compile 'com.android.support:support-annotations:23.1.1' 
... 

然后我仍然得到NullPointerException在我的页眉布局设置为NavigationView。如果您在代码中设置app:headerLayout="@layout/drawer_header"或类似代码,则在AppCompat版本22中,可以通过findViewById()获取标题视图。

程序兼容性版本23,虽然使用RecyclerView所有项目包括标题视图,因此要获得参考其意见的方式如下:

mHeaderView = navigationView.getHeaderView(HEADER_INDEX); 

哪里HEADER_INDEX是最有可能的0,如果你不添加多个标题。

1

我可以很容易地改变柜台的文字。但是,我使用的文本视图是一个LinearLayout内,它有一个机器人:ID以及(这个我试过没有LinearLayout没有问题):

<?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"> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/textCounter" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:textColor="@color/colorPrimary" 
     android:text="5"/> 
</LinearLayout> 

鉴于这种情况,我能看到,访问并使用以下方法修改主要活动中的文本视图:

TextView countText =(TextView)findViewById(R.id.textCounter);

countText.setText(“6”);

当然,我使用一个简单的方法来计算值,只是将它设置为值“6”,但我不知道你的计数器结构实际上是什么样子,而这些不是主要的关注你的问题。

您查看柜台号的能力问题仍然是一个谜。看到我上面的问题,我们也会找出这个元素。

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
} 
+0

我试图将TextView包装在FrameLayout中并给它一个ID。该应用程序不会崩溃,但文本仍然不可见。该死的柜台。 –

+0

@anoniim我为Activity添加了我的'onCreate'文本。这与你的相比如何? – OYRM

+1

经过几个小时后,试图找出什么是错误的,我明白了!我没有使用最新版本的支持库!无论如何,非常感谢所有的努力! –

相关问题