仅在横向模式下显示一些按钮

时间:2019-04-09 12:28:00

标签: android button screen-orientation

我希望仅在横向模式下显示特定按钮-不能纵向显示或可用。我有用于横向和纵向的单独的xml文件

我尝试使用OrientationEventListener并在其运行时检查了设备方向是否处于横向-如果是,我在其上调用了findViewById,但由于NullPointer而崩溃。到目前为止,我的代码:

ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_USE_LOGO);
actionBar.setIcon(R.drawable.ic_launcher);`


your question is probably answered here :


https://stackoverflow.com/questions/42713859/add-icon-to-the-left-of-the-title-in-the-action-bar-in-android


预期-当我将设备方向(从纵向更改为横向)时,我应该在UI中看到ID为button_landscape的按钮,当我点击它时,应该会看到“我正在工作!!!”在日志中

实际:当我更改设备方向(从纵向更改为横向)时,由于找不到按钮而与NullPointer崩溃。

3 个答案:

答案 0 :(得分:0)

崩溃的原因是,当您更改方向时,Android将重新启动活动。并再次调用OnCreate()

请阅读 GdkEventType

1)如果要在不同模式下显示不同的布局,我建议使用相同的名称为纵向模式(layout / layout.xml)和横向模式(layout-land / layout.xml)创建单独的文件。因此android将处理方向更改。

2)如果您不想创建两个单独的布局文件并从类文件中处理它。请将您的代码移至OnCreate(),然后检查布局是从OnCreate()进入纵向还是横向。因为onClickListener不属于onOrientationChanged。它还将解决NullPointerException的问题。根据方向,您可以隐藏/显示按钮。

答案 1 :(得分:0)

就像我在评论部分中提到的那样。您只想在方向更改时处理Button的可见性。

landscapeTest = findViewById(R.id.button_landscape);

应该和您的OnCreate都在OnClickListener中。

这里是一个例子:

public class SomeActivity extends Activity {    

Button landscapeTest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_some);

    landscapeTest = findViewById(R.id.button_landscape);
    landscapeTest.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           Log.v("landscapeButton", "I am working!!!");
       }
    });

    OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) {
    @Override
    public void onOrientationChanged(int orientation) {
        boolean isInLandscape = isInLandscape();
        if (isInLandscape) {
        landscapeTest.setVisibility(View.GONE);
        }else{
        landscapeTest.setVisibility(View.VISIBLE);
        }
    }

}

答案 2 :(得分:0)

尝试此操作将为您提供帮助:

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            landscapeTest.setVisibility(View.VISIBLE);
        } else {
            landscapeTest.setVisibility(View.GONE);
        }
    }