0

我的应用在纵向模式下具有三个视图,一个 TextSwitcher、一个自定义视图和一个自定义键盘。在横向模式下,我需要删除 TextSwitcher 并在右侧添加一个 ListView。我是 android 新手,我可以定义两种布局,即 xxx 和 xxx-land,我的问题是如何实现两个代码分支,一个用于控制横向,一个用于纵向。

4

2 回答 2

3

根据当前方向设置标志

getResources().getConfiguration().orientation

并在访问 textswitcher 或 listview 之前检查标志...并根据标志采取行动,例如在纵向模式下对 Textswitcher 进行更改,但在横向模式下不要因为它将为空...

于 2013-01-31T13:47:33.820 回答
1

定义出现在代码和资源文件中的所有视图,onCreate()Activity可以检查方向以将视图绑定到您的类对象。

例子。

在这里,我们有 2 个布局文件,在两个文件中都包含一个 ImageView,在纵向文件中有一个TextView,而在风景中它包含一个Button而不是TextView

布局域中的my_layout.xml

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/abs__ab_bottom_solid_dark_holo" />

</LinearLayout>

布局端口文件夹 中的my_layout.xml

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/abs__ab_bottom_solid_dark_holo" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

这是活动代码

package com.example.stackoverflow;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.Display;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MyActivity extends Activity {

    // landscape views
    Button button1;

    // protrati views
    TextView textView1;

    // common views (shared between landscape and protrait mode)

    ImageView imageView1;

    public MyActivity() {
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.my_layout);
        imageView1 =(ImageView) findViewById(R.id.imageView1);//exist inside landscape file and portrait


        if(getScreenOrientation() == Configuration.ORIENTATION_PORTRAIT){
            textView1 = (TextView)findViewById(R.id.textView1);
        }else{
            button1 = (Button) findViewById(R.id.button1);
        }


        //when you want to access any thing that is not shared 
        //check the orientation 




    }


    @Override
    protected void onResume() {

        super.onResume();

        //let say that we want here to set a text on the textview  and it's available only for protrait 
        if(getScreenOrientation() == Configuration.ORIENTATION_PORTRAIT){
            //won't be null :) so we can set the text
            textView1.setText("Hello Guys!");
        }

    }

    // http://stackoverflow.com/a/6236110/671676
    public int getScreenOrientation() {
        Display getOrient = getWindowManager().getDefaultDisplay();
        int orientation = Configuration.ORIENTATION_UNDEFINED;
        if (getOrient.getWidth() == getOrient.getHeight()) {
            orientation = Configuration.ORIENTATION_SQUARE;
        } else {
            if (getOrient.getWidth() < getOrient.getHeight()) {
                orientation = Configuration.ORIENTATION_PORTRAIT;
            } else {
                orientation = Configuration.ORIENTATION_LANDSCAPE;
            }
        }
        return orientation;
    }
}

问任何你不明白的东西。

于 2013-01-31T14:16:47.930 回答