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