我想在我的主要活动中将这个xml翻译成java,输出是导航抽屉.我只需要帮助这一部分,我完成了剩下的部分.
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<FrameLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<ListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#FFF"
android:choiceMode="singleChoice"/>
Run Code Online (Sandbox Code Playgroud)
我想在java代码中写上面的xml,怎么样?
提前致谢
更新
final DrawerLayout drawer = new android.support.v4.widget.DrawerLayout(this);
final FrameLayout fl = new FrameLayout(this);
fl.setId(CONTENT_VIEW_ID);
final ListView navList = new ListView (this);
drawer.addView(fl, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
drawer.addView(navList);
setContentView(drawer);
Run Code Online (Sandbox Code Playgroud)
我需要一些帮助来在代码中自定义listview的布局宽度和布局重力.
我的 Android 项目包含 2 个导航抽屉。一个从右侧开始,另一个从左侧开始。单击按钮即可打开它:
if (mDrawerLayout.isDrawerOpen(mRightDrawerView))
mDrawerLayout.closeDrawer(mRightDrawerView);
mDrawerLayout.openDrawer(mLeftDrawerView);
Run Code Online (Sandbox Code Playgroud)
两个抽屉都有自定义布局,使用以下方式定义:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include
android:id="@+id/left_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
layout="@layout/menu_panel" />
<include
android:id="@+id/right_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
layout="@layout/search_panel" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
问题是:当我打开抽屉并尝试捕获其单击事件时,(抽屉布局中有按钮和文本视图)抽屉会关闭而不是响应单击事件。
我也用过:
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerLayout.requestDisallowInterceptTouchEvent(true);
Run Code Online (Sandbox Code Playgroud)
我不希望抽屉在其内部的触摸事件发生时关闭。
我还尝试更改抽屉布局的“可点击”属性。但没有用。
非常感谢任何帮助。谢谢
我在抽屉上看到可以看到点击效果的问题.
我有活动xml布局如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
你可以看到我放入NavigationView我的DrawerLayout然后NavigationView使用菜单xml文件填充.
我activity_main_drawer.xml看起来如下:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
>
<group>
<item
android:id="@+id/id1"
android:title="Item 1"/>
<item
android:id="@+id/id2"
android:title="Item 2"/>
<item
android:id="@+id/id3"
android:title="Item 3"/>
<item
android:id="@+id/id4"
android:title="Item 4"/>
</group>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我这样做时,我点击该抽屉菜单中的项目后没有任何视觉效果.我想要的是所谓的"涟漪效应".我该怎么做?
android navigation-drawer drawerlayout navigationview android-navigationview
我创建了一个具有导航视图的应用程序。
当应用程序全屏显示时,我打开导航视图,它向我显示导航视图顶部的黑色覆盖层,并显示屏幕底部和导航视图底部之间的间隙。为了那个原因。
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start">
...
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
tools:ignore="RtlSymmetry">
<!--PlayList Layout-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcvVideoPlaylist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:fitsSystemWindows="false"
tools:listitem="@layout/item_video_playlist" />
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Run Code Online (Sandbox Code Playgroud)
任何人都给我解决方案从导航视图中删除该叠加层和导航视图中的间隙
我有一个关于实现带有导航组件的抽屉布局的问题。
我已经使用 Android Studio 的包含导航抽屉活动创建了抽屉布局。
实际上,如果菜单项的目的是更改导航 XML 中定义的片段或活动(如屏幕截图上的程序、歌曲、设置等),那么一切都很好
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.nav_user_programs_list,
R.id.nav_user_songs_list,
R.id.nav_user_settings,
R.id.nav_user_legal_notices,
R.id.nav_games
), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)
但是,我还想在“注销”菜单项上执行注销操作而不启动另一个片段或活动:
我设法这样做:
navView.setNavigationItemSelectedListener {
if (it.itemId == R.id.nav_logout) {
logoutUser()
}
true
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是:使用该方法,所有其他曾经工作(更改片段)的项目不再工作,因为它调用了 NavigationItemSelectedListener,在这种情况下它什么都不做。
有没有结合这两种方法的解决方案?:
我希望它足够清楚。如果您需要精度,请不要犹豫。 …
我真的不知道这两种创建导航菜单的方法有什么区别.所以我读到两者都可以用作两个片段的容器(主片段,细节片段).那么你能帮我理解哪种方法更好,为什么?我找不到相关信息.
谢谢.
为什么DrawerLayout仅在支持库中可用而不在标准API中?
我试图将它包含在minSDK 15的项目中,而Android Studio无法解析该类.使用v4支持库进行编译虽然做到了,但我想知道为什么会这样.
我一直在寻找这个问题,但我还是找不到解决方案.对于我的DrawerLayout设计,我不会使用listview而是使用linearlayout作为我的视图的容器.我首先通过在linearlayout中添加一个按钮来测试它,但我无法点击它.继承了XML.
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/left_drawer"
android:background="@color/white"
android:orientation="vertical"
android:layout_gravity="start"
android:layout_width="250dp"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_test"
android:text="TEST"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<FrameLayout
android:id="@+id/container_fragment2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="1dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
在java中,我还尝试在按钮加载和工作后将文本放在按钮中.唯一不起作用的是我点击它.抽屉就会关闭.
/**Init Drawer*/
private void initDrawer(){
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerContainer = (LinearLayout) findViewById(R.id.left_drawer);
//mDrawerContainer.setOnClickListener(new DrawerItemClickListener());
mDrawerContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"initDrawer",Toast.LENGTH_SHORT).show();
}
});
btn_test = (Button)mDrawerContainer.findViewById(R.id.btn_test);
btn_test.setOnClickListener(new View.OnClickListener() { //this is not working,i cant click the button
@Override
public void onClick(View v) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照本教程使用设计支持库中的新DrawerLayout.
似乎Android工作室没有识别NavigationView布局.
这是我的main_activity布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"/>
</LinearLayout>
<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/drawer_menu"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
当我试图运行该项目时,我收到了下一个错误:
错误:(19)找不到属性'headerLayout'的资源标识符
但我确实有这个drawer_header xml文件
android android-support-library android-studio drawerlayout navigationview
这是我发现的一种奇怪的错误.
但是,如果我在片段中有一个RecyclerView,然后打开然后关闭我的DrawerLayout,我的RecyclerView成为焦点.这意味着关闭我的DrawerLayout将导致ScrollView跳转到我的RecyclerView.显然,我希望ScrollView的位置在DrawerLayout关闭时不会移动,并且绝对不能在我的RecyclerView上找到.
码
在我的应用程序中,我有ScrollViews中包含的RecyclerViews,类似于此设置:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="180dp">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/header_photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:tint="#80000000"
android:scaleType="centerCrop"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
<TextView android:id="@+id/header_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:textColor="@color/text_SecondaryColor"
android:textSize="@dimen/header_xxlarge"/>
<View android:id="@+id/divider"
android:layout_width="0dp"
android:layout_height="@dimen/hr_thick"
android:background="@color/accent_PrimaryColor"/>
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:orientation="vertical"
android:layout_margin="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button android:id="@+id/button_more"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp"
android:layout_width="400px"
android:layout_height="100px"
android:layout_gravity="center"
android:gravity="center"
android:background="@drawable/button_dark"
android:textColor="@drawable/button_dark_textcolor"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
我的DrawerLayout的XML设计安排如下:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
android:layout_height="wrap_content"
android:layout_width="match_parent" …Run Code Online (Sandbox Code Playgroud)