2013-01-31 37 views
0

我的应用程序在纵向模式,TextSwitcher,自定义视图和自定义键盘中有三个视图。 在横向模式下,我需要删除TextSwitcher并在右侧添加一个ListView。 我是新来的android,我可以定义两个布局,即xxx和xxx-land,我的问题是如何实现代码的两个分支,一个用于控制风景,一个用于肖像。如何在android中为纵向和横向模式定义不同的控件

回答

1

定义,在这两种资源的文件出现在你的代码 并在onCreate()在所有视图中Activity可以检查方向绑定的意见,你的类的对象。

示例。

在这里我们有包含在这两个文件的ImageView的,并在画像文件有一个TextView和景观它包含Button代替TextView

my_layout.xml布局2个布局文件-land

<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; 
    } 
} 

问什么,你不明白。

+0

感谢您的回复。我现在可以继续。 –

3

设置一个标志,基于当前方向

getResources().getConfiguration().orientation 

和访问textswitcher或ListView检查标志...并根据标志采取行动,例如在纵向模式下进行更改Textswitcher之前,但在景观不要因为这将是空...

相关问题