我正在使用AA,想为纵向和横向指定两个不同的xml布局文件。
在我的java类中,标记为EActivity的方法中,提供了一个注解为@Click的方法来响应点击事件。
在纵向模式下,一切都很好。但是当手机旋转时,布局发生了变化,按钮不再有反应。
我猜测,@EActivity注解后提供的布局是纵向布局。
如何才能同时提供纵向和横向布局呢?
先谢谢你。
更新我使用两个不同的布局文件来 "监听 "方向的变化,一个是纵向的,名为layoutcontact.xml,另一个是横向的,名为layout-landcontact.xml。Android会根据手机方向使用正确的布局。
为了给点击事件注册监听器,我使用了Android Annotations。
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>
联系.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);
}
}
同时,在Manifest中的活动中添加以下内容。android:configChanges="keyboardHidden|orientation|screenSize"
为了创建不同的布局配置,以纵向或横向的方式保存 单一资源文件名 将是 自动接收 由系统可以使用配置限定符。
配置限定符用于确定应该使用哪些资源。在Android系统中我们有多个限定符。"表2. 配置限定符名称"。
下面是示例截图,解释如何挑选需要的配置限定符。
1)首先输入资源名称,从 "可用限定符 "列表中选择一个限定符。
2)按 [>>] 按钮将选定的限定符移动到 "选定的限定符 "列表中;3)现在你已经选定了限定符,可以为每个限定符指定值。
注意:每个文件不能只选择一种类型的限定符一次。如:一个尺寸限定符,一个密度限定符等。
在 "项目视图 "标签下的 app/src/main/res
你可以看到接下来的结构。
1) 在 "Android视图 "模式下。
2) 在 "项目文件 "模式下
您应该在默认文件夹下提供资源文件的默认版本,如 layout
, drawable
, values
等,如果你的资源文件依赖于配置限定符。如果配置限定符不符合要求,也就是说运行应用程序的设备没有资格使用给定的资源,并且你的应用程序没有默认的资源文件,那么你的应用程序就会因为以下原因而崩溃
android.content.res.Resources$NotFoundException: Resource ID #0x7f0b001c