我使用DrawerLayout,最近我想在drawerLayout中改变listView的重力.但是在我将listView的重力改为android:layout_gravity="start|bottom"from后android:layout_gravity="start",drawerLayout无法锁定
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
Run Code Online (Sandbox Code Playgroud)
setDrawerLockMode()使用;
<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" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#F3F3F4"
android:choiceMode="singleChoice" >
</ListView>
Run Code Online (Sandbox Code Playgroud)
但它没有锁定;
<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" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="start|bottom"
android:background="#F3F3F4"
android:choiceMode="singleChoice" >
</ListView>
Run Code Online (Sandbox Code Playgroud)
`
任何线索为什么我不能使用其他重力的锁模式?
谢谢!
我正在关注本教程,面对一个奇怪的问题.
不要紧,什么是我的DrawerLayout,但如果它layout_height还是layout_width被设置为硬编码的一些其他的东西,它会抛出此运行时异常.
我试图在图形布局工具中渲染输出时看到很多关于此错误的报告,但在运行时错误中找不到任何报告.
我有最新的支持库,刚刚更新到版本 21.0.2
如果可能的话,我想避免硬编码我的身高和宽度.
文件的开头看起来像这样.这样,它就会粉碎.
<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" >
Run Code Online (Sandbox Code Playgroud)
而堆栈跟踪是
12-04 00:57:51.051: E/AndroidRuntime(26254): FATAL EXCEPTION: main
12-04 00:57:51.051: E/AndroidRuntime(26254): Process: com.lablabla.homedestroyer, PID: 26254
12-04 00:57:51.051: E/AndroidRuntime(26254): java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY.
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:814)
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.View.measure(View.java:17430)
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.View.measure(View.java:17430)
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Android应用程序来利用抽屉布局功能.我希望能够使用抽屉布局作为整个应用程序中可用的导航工具.要使用抽屉布局,我在我的活动布局xml文件中使用以下内容:
<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">
<!-- The main content view -->
<LinearLayout
android:id="@+id/main_content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/navigational_drawer"
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#FFFFFF"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
但是,围绕PreferenceActivity包装DrawerLayout我遇到了很多困难.PreferenceActivity是一种特殊的活动,我想保留它,因为它可以帮助我在我的应用程序中保持Android首选项的外观和感觉; 话虽如此,它使用addPreferencesFromResource()调用来加载首选项,并且不使用addContentView()调用来加载XML文件; 首选项资源通常包含不喜欢包装在DrawerLayouts中的PreferenceScreen标记.
任何人都必须处理这个问题,你是如何解决的?如果您的Android应用中有PreferenceActivity,并且您在同一活动中有DrawerLayout,请分享您是如何做到的.任何帮助将非常感激.
编辑:如果我改变
<!-- The main content view -->
<LinearLayout
android:id="@+id/main_content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
至
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
加载PreferenceActivity时应用程序不会崩溃(因为id"list"与Preference Activity期望找到的匹配); 然而,抽屉没有显示.这几乎就像ListView"列表"下面的所有内容都被忽略了一样.
使用抽屉布局时,有没有办法将抽屉视图覆盖在操作栏上?我不想在显示抽屉时隐藏操作栏.我希望操作栏只是保持放置,但是要发送到后台.一个例子是iOS Play音乐应用程序......

我的当前实现隐藏并显示抽屉状态更改时的操作栏,但我不喜欢此用户体验.
public void onDrawerClosed(View view) {
getActionBar().show();
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().hide();
invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud) java android android-actionbar navigation-drawer drawerlayout
这是我的设置,我正在运行DrawerLayout,其中包含一个包含AppBarLayout和nestedscrollview的CoordinatorLayout.我试图让nestedscrollview正常滚动,工具栏在向下滚动时隐藏,并在向上滚动时重新编辑.附在我的XML代码中.将不胜感激任何帮助..已阅读所有相关问题并实施他们的答案,但没有任何成功.
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout_admin"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/admincoordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/app_bar"
layout="@layout/app_bar"
app:layout_scrollFlags="scroll|enterAlways" />
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:id="@+id/adminrelScroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/menu_drawer" />
Run Code Online (Sandbox Code Playgroud)
tabs toolbars drawerlayout material-design android-coordinatorlayout
我得到NullPointerException的onTouchEvent的CoordinatorLayout.
我使用DrawerLayout与CollapsingToolbarLayout支持Android程序兼容性的v23.0.0库.
我的观察是在滚动CollapsingToolbarLayout或点击抽屉项目时随机发生崩溃.
有没有人面临这个问题?任何解决这个例外的工作?
logcat的:
08-22 15:16:34.657: E/AndroidRuntime(27596): java.lang.NullPointerException: Attempt to invoke virtual method 'float android.view.MotionEvent.getX()' on a null object reference
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.view.View.onTouchEvent(View.java:9321)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:449)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.view.View.dispatchTouchEvent(View.java:8388)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2398)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.support.v4.widget.DrawerLayout.cancelChildViewTouch(DrawerLayout.java:1491)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.support.v4.widget.DrawerLayout$ViewDragCallback.peekDrawer(DrawerLayout.java:1739)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.support.v4.widget.DrawerLayout$ViewDragCallback.access$000(DrawerLayout.java:1624)
08-22 15:16:34.657: E/AndroidRuntime(27596): at android.support.v4.widget.DrawerLayout$ViewDragCallback$1.run(DrawerLayout.java:1630)
08-22 15:16:34.657: …Run Code Online (Sandbox Code Playgroud) android android-appcompat drawerlayout android-coordinatorlayout
我是Android的新手,在我的应用程序中,我正在使用DrawerLayout,它没关系.但我想改变ActionBarDrawerToggle图标.
我们怎样才能改变它?
我尝试了很多,但我无法达到预期的效果,请帮助我一个人?
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navigation_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</LinearLayout>
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
public class MainActivity extends AppCompatActivity {
ActionBarDrawerToggle actionBarDrawerToggle;
DrawerLayout drawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
drawerLayout = (DrawerLayout) findViewById(R.id.navigation_drawer);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.app_name,R.string.app_name);
drawerLayout.setDrawerListener(actionBarDrawerToggle);
}
Run Code Online (Sandbox Code Playgroud) 我有一个活动DrawerLayout.我们的客户要求我们根据从中选择的项目动态更改操作栏颜色和此活动的相应状态栏颜色DrawerLayout.这很容易做到.但是,我的问题是,当我动态更改状态栏颜色时,我无法保持状态栏透明.当我打开抽屉时,彩色状态栏覆盖了这样的顶部DrawerLayout:
但是,我希望我DrawerLayout看起来像这样:
我可以使用以下行:
<item name="android:windowTranslucentStatus">true</item>
Run Code Online (Sandbox Code Playgroud)
但是,我的问题不在于我无法设置状态栏的透明度.我的问题是动态更改状态栏和操作栏颜色不起作用windowTranslucentStatus.colorPrimaryDark即使我打电话,我的状态栏颜色仍然是(上图中状态栏上可见的芥末黄色)getWindow().setStatusBarColor().
现在,我跟着这个教程和这个和这个在许多其他计算器的问题,但未能解决该问题.所有这些文章都说,ActionBar一旦我设置为windowTranslucentStatus,将移动到状态栏下方的顶部(以便状态栏与操作栏重叠)true.之后,我应该能够在操作栏中添加一些填充,只需更改操作栏颜色也会导致颜色相同的深色状态栏,因为状态栏实际上是半透明的并且与我的操作栏重叠.但是,出于某种原因,在我的情况下不会发生这种情况.操作栏保持它是我是否设置fitsSystemWindows到true或false或完全删除该属性.操作栏始终位于状态栏下方,当然,如果我设置透明度,则状态栏始终为黄色.
我还尝试以编程方式更改状态栏颜色时设置alpha.这确实使状态栏有点透明,但它看起来很奇怪,因为它不再是黑暗.删除CoordinatorLayout也没有帮助.我花了几个小时试图解决这个问题,现在非常沮丧.任何帮助是极大的赞赏.
我的activity_main:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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"
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">
<include layout="@layout/nav_header_main" />
<android.support.v7.widget.RecyclerView
android:id="@+id/nav_menu_recyclerview"
android:layout_width="match_parent" …Run Code Online (Sandbox Code Playgroud) xml android drawerlayout android-statusbar android-coordinatorlayout
有什么方法可以修改我的主要活动的XML文件(我希望添加导航抽屉的那个),以便在添加导航抽屉时允许我的现有布局保留?
我目前的代码如下:
<android.support.constraint.ConstraintLayout 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"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:ems="10"
android:hint="@string/edit_message"
android:inputType="textPersonName"
app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:onClick="sendMessage"
android:text="@string/button_send"
app:layout_constraintBaseline_toBaselineOf="@+id/editText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/editText" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="146dp"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button2"
app:layout_constraintVertical_bias="0.0">
<ImageView
android:id="@+id/imageView3"
android:layout_width="204dp"
android:layout_height="139dp"
android:baselineAlignBottom="false"
android:src="@drawable/monetwaterloo" />
</LinearLayout>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:onClick="sendPhoto"
android:text="@string/button_photo_send"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout"
app:layout_constraintVertical_bias="0.04000002" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp" …Run Code Online (Sandbox Code Playgroud) 我有Activity与DrawerLayout(其中包含左和右抽屉).我想知道我是否可以禁用特定碎片的右抽屉.
我已经读到了mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED),但它会锁定整个抽屉,我仍然需要左抽屉