Android 安卓人像vs景观
我知道有可能有一个纵向和横向模式的布局(这不是问题)。比如说,在纵向模式下,我想显示3个文本视图(实际上我有3个不同的图形,每个xyz轴一个),在横向模式下,我只想显示一个文本视图(在我的例子中,一个图形包含所有3个轴),所有这些视图都有自己的id 现在在相应的活动中,如何设置ui控件?因为在横向模式下只有一个文本视图,而在纵向模式下只有3个。所以,当我处于纵向模式时,我只能在textview 1、2和3中写入内容,而不能在横向的textview中写入任何内容,反之亦然 手动检查ui控件是否在此处(非空)不是正确的解决方案,对吗 e、 g 假设在纵向模式下,我有一个id为“text1”的文本视图,在横向模式下有一个id为“text2”的文本视图。 现在,在活动的on create方法中,我执行以下操作:Android 安卓人像vs景观,android,user-interface,landscape-portrait,Android,User Interface,Landscape Portrait,我知道有可能有一个纵向和横向模式的布局(这不是问题)。比如说,在纵向模式下,我想显示3个文本视图(实际上我有3个不同的图形,每个xyz轴一个),在横向模式下,我只想显示一个文本视图(在我的例子中,一个图形包含所有3个轴),所有这些视图都有自己的id 现在在相应的活动中,如何设置ui控件?因为在横向模式下只有一个文本视图,而在纵向模式下只有3个。所以,当我处于纵向模式时,我只能在textview 1、2和3中写入内容,而不能在横向的textview中写入任何内容,反之亦然 手动检查ui控件是否在此
text1 = (TextView) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);
text1.setText("some text");
text2.setText("some other text");
我总是会得到一个
NullPointerException
,因为在任何一种情况下,其中一个文本视图都不存在。在使用该字段之前,可以检查该字段是否不为空,但这会引入更多需要注意的逻辑-因此它的可维护性较低可能是通过根据您使用的模式使某些文本视图可见/不可见?
您可以通过以下方式检测正在使用的模式:getResources().getConfiguration().orientation
我不知道这是否真的能回答你的问题,但是
最好的方法是,您可以在两个版面中创建并使用visibility=“gone”隐藏它们,以保持对视图的有效引用,因为您可能不想浪费版面中不可见的资源设置和处理字段,除非这在您的应用程序中有意义,您应该检查
null
视图,这会让您了解正在处理的方向:
text1 = (TextView) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);
if ( text1 != null ) text1.setText("some text");
if ( text2 != null ) text2.setText("some other text");
事实上,这就是我现在正在做的,但是我在不止一个地方使用TextView,并且总是在前面加上NOTNULL检查,这会使代码变得有点混乱,使其可读性降低,所以我认为可能还有另一个最佳实践。当然,将视图设置为不可见会“浪费”资源,但在我的情况下,这并不是一个真正的问题,所以我选择使用它,因为代码中不需要任何额外的逻辑。