DrawerLayout 无法正常工作并阻止不相关的小部件
DrawerLayout not functioning and blocks not related widgets
我有一个 Activity
,它有一个 TextView
,我想给那个 Activity
添加一个导航抽屉。所以我更改了 XML
并实施了 DrawerLayout
.
在实施 DrawerLayout
后它根本不起作用(意味着它不打开)并且 DrawerLayout
中实施的 FrameLayout
块与 [=16 无关=] TextView
文本。
drawer.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.dl.master.lyrics.lyricsmaster.LyricsActivity"
android:id="@+id/drawer_layout_id"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- The main content view where fragments are loaded -->
<FrameLayout
android:id="@+id/frame_layout_id"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/text_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<!-- The navigation drawer -->
<TextView
android:layout_width="220dp"
android:layout_height="match_parent"
android:text="Try me! NOW"
/>
</android.support.v4.widget.DrawerLayout>
<!--
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
-->
LinearLayout
里面的TextView
是不相关的DrawerLayout
小部件,看不到。另一个 TextView
是导航抽屉 TextView
。我知道导航抽屉小部件必须有 android:layout_gravity="start"
属性 但它显然没有布局父级所以 AS 不允许我写它。
当 运行 Activity
我看到导航抽屉 TextView
的文本 "Try it NOW" 时,仅此而已。
DrawerActivity.java:
public class LyricsActivity 扩展 AppCompatActivity
{
私有 TextView 文本;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.drawer);
this.initializeViews();
this.actionBarDrawerToggle = new ActionBarDrawerToggle(LyricsActivity.this,this.drawerLayout,
null,R.string.open_drawer_description,R.string.close_drawer_description);
this.drawerLayout.addDrawerListener(actionBarDrawerToggle);
//this.drawerLayout.openDrawer(GravityCompat.START); // java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
}
@Override
protected void onResume()
{
super.onResume();
this.text.setText(getIntent().getStringExtra("Tags"));
}
/**
* Initialize all my views.
*
*/
public void initializeViews()
{
this.lyrics = (TextView) findViewById(R.id.text_tv_id);
this.drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout_id);
}
我阅读了所有文档和大量 SO post,但没有任何帮助或解决此类问题。
DrawerLayout
通过 layout_gravity
属性确定哪些 View
用作抽屉。只需使用适当的值将此属性添加到您的 TextView
。例如:
<!-- The navigation drawer -->
<TextView
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:text="Try me! NOW"
/>
我有一个 Activity
,它有一个 TextView
,我想给那个 Activity
添加一个导航抽屉。所以我更改了 XML
并实施了 DrawerLayout
.
在实施 DrawerLayout
后它根本不起作用(意味着它不打开)并且 DrawerLayout
中实施的 FrameLayout
块与 [=16 无关=] TextView
文本。
drawer.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.dl.master.lyrics.lyricsmaster.LyricsActivity"
android:id="@+id/drawer_layout_id"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- The main content view where fragments are loaded -->
<FrameLayout
android:id="@+id/frame_layout_id"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/text_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<!-- The navigation drawer -->
<TextView
android:layout_width="220dp"
android:layout_height="match_parent"
android:text="Try me! NOW"
/>
</android.support.v4.widget.DrawerLayout>
<!--
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
-->
LinearLayout
里面的TextView
是不相关的DrawerLayout
小部件,看不到。另一个 TextView
是导航抽屉 TextView
。我知道导航抽屉小部件必须有 android:layout_gravity="start"
属性 但它显然没有布局父级所以 AS 不允许我写它。
当 运行 Activity
我看到导航抽屉 TextView
的文本 "Try it NOW" 时,仅此而已。
DrawerActivity.java:
public class LyricsActivity 扩展 AppCompatActivity { 私有 TextView 文本;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.drawer);
this.initializeViews();
this.actionBarDrawerToggle = new ActionBarDrawerToggle(LyricsActivity.this,this.drawerLayout,
null,R.string.open_drawer_description,R.string.close_drawer_description);
this.drawerLayout.addDrawerListener(actionBarDrawerToggle);
//this.drawerLayout.openDrawer(GravityCompat.START); // java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
}
@Override
protected void onResume()
{
super.onResume();
this.text.setText(getIntent().getStringExtra("Tags"));
}
/**
* Initialize all my views.
*
*/
public void initializeViews()
{
this.lyrics = (TextView) findViewById(R.id.text_tv_id);
this.drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout_id);
}
我阅读了所有文档和大量 SO post,但没有任何帮助或解决此类问题。
DrawerLayout
通过 layout_gravity
属性确定哪些 View
用作抽屉。只需使用适当的值将此属性添加到您的 TextView
。例如:
<!-- The navigation drawer -->
<TextView
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:text="Try me! NOW"
/>