2013-01-31 79 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之前,但在景觀不要因爲這將是空...

相關問題