Android 注释:纵向和横向的不同布局
Android annotations: Different layout for portrait and landscape
我正在使用 AA 并想为纵向和横向指定两个不同的 xml 布局文件。
在我的javaclass中,标记为EActivity,提供了一个用@Click注解的方法来响应点击事件。
纵向模式下一切正常。但是当 phone 旋转时,布局发生变化,按钮不再响应。
我猜@EActivity注解后提供的布局是纵向布局
如何同时提供纵向和横向布局?
提前致谢。
更新
我 'listen' 使用两个不同的布局文件来更改方向,一个用于纵向,名为 layout/contact.xml,另一个用于横向,名为 layout-land/contact.xml. Android 完成剩下的工作并根据 phone 方向使用正确的布局。
为了注册点击事件的监听器,我使用Android注解:
contact.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="#000000"
android:layout_height="match_parent">
<include
layout="@layout/header_layout" />
<!-- Some elements -->
</LinearLayout>
header_layout.xml
<?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:background="#000000"
android:layout_height="60dp">
<ImageButton
android:id="@+id/menuHome"
android:layout_width="25dp"
android:src="@drawable/menu"
android:paddingTop="22dp"
android:paddingBottom="22dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_gravity="center"
android:background="#00000000"
android:scaleType="fitCenter"
android:layout_height="match_parent" />
<!-- Other buttons -->
</LinearLayout>
contact.java
@EActivity(R.layout.activity_contact)
public class ContactActivity extends TopLevelActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public String getPageTitle() {
return "Nous contacter";
}
}
** TopLevelActivity.java **
@EActivity
public abstract class TopLevelActivity extends Activity implements ITopLevelActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Click
public void menuHome () {
startActivity(new Intent(this, HomeActivity_.class));
}
}
在您的 java 文件中添加以下代码
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.activity_main_h);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
}
else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.activity_main_v);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
}
}
此外,将以下内容添加到清单中的 activity:
android:configChanges="keyboardHidden|orientation|screenSize"
为了创建不同的纵向或横向布局配置,保留单个资源文件名,将自动拾取系统,您可以使用配置限定符。
用于确定应使用哪个资源的配置限定符。我们在 Android 系统中有多个限定符:"Table 2. Configuration qualifier names."
以下示例屏幕截图说明了您如何选择所需的配置限定符。
1) 首先,您输入资源名称和 select 来自 "Available qualifiers" 列表的限定符;
2) 按[>>]按钮将selected限定符移动到"Chosen qualifiers"列表;
3) 现在您有限定符 selected 并且可以为每个单独的限定符指定值。
注意:您不能 select 每个文件只能使用一种类型的限定符。例如。一种尺寸限定符、一种密度限定符等
在 app/src/main/res
下的 "Project View" 选项卡中,您可以看到下一个结构:
1) 在"Android view"模式下:
2) 在 "Project Files" 模式下
极其重要
如果您有依赖于配置限定符的资源文件,您应该在默认文件夹下提供资源文件的默认版本,例如 layout
、drawable
、values
等。如果不满足配置限定符,意味着设备 运行 您的应用程序不符合使用给定资源的条件,并且您的应用程序没有默认资源文件 您的应用程序将崩溃
android.content.res.Resources$NotFoundException: Resource ID #0x7f0b001c
我正在使用 AA 并想为纵向和横向指定两个不同的 xml 布局文件。
在我的javaclass中,标记为EActivity,提供了一个用@Click注解的方法来响应点击事件。
纵向模式下一切正常。但是当 phone 旋转时,布局发生变化,按钮不再响应。
我猜@EActivity注解后提供的布局是纵向布局
如何同时提供纵向和横向布局?
提前致谢。
更新 我 'listen' 使用两个不同的布局文件来更改方向,一个用于纵向,名为 layout/contact.xml,另一个用于横向,名为 layout-land/contact.xml. Android 完成剩下的工作并根据 phone 方向使用正确的布局。
为了注册点击事件的监听器,我使用Android注解:
contact.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="#000000"
android:layout_height="match_parent">
<include
layout="@layout/header_layout" />
<!-- Some elements -->
</LinearLayout>
header_layout.xml
<?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:background="#000000"
android:layout_height="60dp">
<ImageButton
android:id="@+id/menuHome"
android:layout_width="25dp"
android:src="@drawable/menu"
android:paddingTop="22dp"
android:paddingBottom="22dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_gravity="center"
android:background="#00000000"
android:scaleType="fitCenter"
android:layout_height="match_parent" />
<!-- Other buttons -->
</LinearLayout>
contact.java
@EActivity(R.layout.activity_contact)
public class ContactActivity extends TopLevelActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public String getPageTitle() {
return "Nous contacter";
}
}
** TopLevelActivity.java **
@EActivity
public abstract class TopLevelActivity extends Activity implements ITopLevelActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Click
public void menuHome () {
startActivity(new Intent(this, HomeActivity_.class));
}
}
在您的 java 文件中添加以下代码
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.activity_main_h);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
}
else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.activity_main_v);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
}
}
此外,将以下内容添加到清单中的 activity:
android:configChanges="keyboardHidden|orientation|screenSize"
为了创建不同的纵向或横向布局配置,保留单个资源文件名,将自动拾取系统,您可以使用配置限定符。
用于确定应使用哪个资源的配置限定符。我们在 Android 系统中有多个限定符:"Table 2. Configuration qualifier names."
以下示例屏幕截图说明了您如何选择所需的配置限定符。
1) 首先,您输入资源名称和 select 来自 "Available qualifiers" 列表的限定符;
2) 按[>>]按钮将selected限定符移动到"Chosen qualifiers"列表; 3) 现在您有限定符 selected 并且可以为每个单独的限定符指定值。
注意:您不能 select 每个文件只能使用一种类型的限定符。例如。一种尺寸限定符、一种密度限定符等
在 app/src/main/res
下的 "Project View" 选项卡中,您可以看到下一个结构:
1) 在"Android view"模式下:
2) 在 "Project Files" 模式下
极其重要
如果您有依赖于配置限定符的资源文件,您应该在默认文件夹下提供资源文件的默认版本,例如 layout
、drawable
、values
等。如果不满足配置限定符,意味着设备 运行 您的应用程序不符合使用给定资源的条件,并且您的应用程序没有默认资源文件 您的应用程序将崩溃
android.content.res.Resources$NotFoundException: Resource ID #0x7f0b001c