我是Android的新手,所以我有一个非常基本的问题。
基本上,我有两个屏幕布局,一个用于纵向,另一个用于横向。我使用文件夹res / layout和res / layout-land。两个方向都画得很好,但是每个方向都有不同的小部件(按钮),btnPortrait和btnLandscape。
当我尝试调用onSetClickListener()时出现问题。因为当设备以纵向定向时,框架无法定位btnLandscape,反之亦然,我使用onConfigurationChange()手动处理方向更改。它似乎也不起作用。
我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnPortrait = (Button) findViewById(R.id.portraitButton);
tvPortrait = (TextView) findViewById(R.id.portraitText);
btnLandscape = (Button) findViewById(R.id.landscapeButton);
tvLandscape = (TextView) findViewById(R.id.landscapeText);
}
onConfigurationChange():
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
btnPortrait.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "Portrait",Toast.LENGTH_SHORT).show();
}
});
}
else {
btnLandscape.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "Landscape", Toast.LENGTH_SHORT).show();
}
});
}
}
没有Toasts工作。 有人知道会发生什么吗?
提前致谢。
答案 0 :(得分:1)
不要以不同的方式命名;相同功能的小部件应该共享相同的ID,无论是纵向还是横向。
如果它是一个仅在横向上存在或功能不同的窗口小部件,只需在findViewById()之后检查它是否为null,如果返回null,则表示您不在具有包含该按钮的布局的配置中。 / p>
答案 1 :(得分:0)
只需确保layout-land中的按钮ID在默认布局中是相同的ID
Update1:
确定在使用像这样的小部件之前添加非空检查
if( btnPortrait !=null ) {
// do what you want
}
答案 2 :(得分:0)
我不确定你在评论中的意思是“它们不是同一个按钮”,但用两种不同的资源ID做你想做的事情的方法如下......
public class MyActivity extends Activity {
Button myButton = null;
TextView myTextView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = (Button) findViewById(R.id.portraitButton);
if (myButton == null)
myButton = (Button) findViewById(R.id.landscapeButton);
myTextView = (TextView) findViewById(R.id.portraitText);
if (myTextView == null)
myTextView = (TextView) findViewById(R.id.landscapeText);
}
// The following method is your OnClickListener
public void sayHello(View v) {
switch (v.getId) {
case R.id.portraitButton :
// Do something for portrait
break;
case R.id.landscapeButton :
// Do something for landscape
break;
}
}
}
在布局文件中,您可以使用OnClickListener
分配android:onClick
,如下所示...
肖像......
<Button
android:id="@+id/portraitButton"
...
android:onClick="sayHello" >
</Button>
对于风景......
<Button
android:id="@+id/landscapeButton"
...
android:onClick="sayHello" >
</Button>
通过这种方式,调用OnClickListener
时,setContentView(...)
由通货膨胀过程设定。然后简单地归结为它确定资源ID以决定需要采取什么行动。