安卓注解。纵向和横向的不同布局

问题描述 投票:0回答:2

我正在使用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 android android-annotations
2个回答
0
投票

在你的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"


0
投票

为了创建不同的布局配置,以纵向或横向的方式保存 单一资源文件名 将是 自动接收 由系统可以使用配置限定符。

配置限定符用于确定应该使用哪些资源。在Android系统中我们有多个限定符。"表2. 配置限定符名称"。

下面是示例截图,解释如何挑选需要的配置限定符。

1)首先输入资源名称,从 "可用限定符 "列表中选择一个限定符。

Selecting desired configuration qualifiers

2)按 [>>] 按钮将选定的限定符移动到 "选定的限定符 "列表中;3)现在你已经选定了限定符,可以为每个限定符指定值。

注意:每个文件不能只选择一种类型的限定符一次。如:一个尺寸限定符,一个密度限定符等。

Selected orientation qualifier

在 "项目视图 "标签下的 app/src/main/res 你可以看到接下来的结构。

1) 在 "Android视图 "模式下。

Project View tab, Android presentation mode

2) 在 "项目文件 "模式下

Project View tab, Project Files presentation mode

极其重要

您应该在默认文件夹下提供资源文件的默认版本,如 layout, drawable, values 等,如果你的资源文件依赖于配置限定符。如果配置限定符不符合要求,也就是说运行应用程序的设备没有资格使用给定的资源,并且你的应用程序没有默认的资源文件,那么你的应用程序就会因为以下原因而崩溃

android.content.res.Resources$NotFoundException: Resource ID #0x7f0b001c
© www.soinside.com 2019 - 2024. All rights reserved.