所以我正在接受谷歌“开发Android应用程序”的课程,因为我遇到了一个我无法解释的严重问题而陷入困境:
请参阅,他们的想法是在res \ layout-sw600dp文件夹下为平板电脑设置不同的布局文件,这样如果设备的最小高度/宽度为600dips,则会有不同的布局膨胀。 唯一的问题是由于某种原因,断言不起作用,不是因为他们的代码,也不是我在这里添加的简单代码,至少不适用于AVD平板电脑(我已经使用了带有api 21的Nexus 10)。 例如,以下代码显示“电话!”在吐司而不是“平板电脑!”:
public class MainActivity extends AppCompatActivity {
static final String TABLET="Tablet!";
static final String PHONE="Phone!";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String foundDeviceStr;
if(findViewById(R.id.weather_detail_container)==null){
foundDeviceStr=PHONE;
} else{
foundDeviceStr=TABLET;
}
Toast toast=Toast.makeText(this,foundDeviceStr,Toast.LENGTH_LONG);
toast.show();
}
}
当文件夹layout-sw600dp下的xml文件确实有一个id为weather_detail_container的框架时。
我将添加我在电子邮件底部创建的两个xml文件,但您也可以从以下Google项目中尝试分支5.10 - 它不会加载两个窗格: https://github.com/udacity/Sunshine-Version-2/tree/5.10_selected_item,至少不是任何AVD设备(我有一个物理安卓手机,但没有物理平板电脑)。
这里要完成的问题是两个xml文件:
在文件夹布局下,这是activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Whatever"/>
</LinearLayout>
,在文件夹layout-sw600dp下,这是activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
tools:context="com.example.android.sunshine.app.MainActivity">
<!--
This layout is a two-pane layout for the Items master/detail flow.
-->
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="Whatever" />
<FrameLayout
android:id="@+id/weather_detail_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4" />
</LinearLayout>
答案 0 :(得分:0)
您需要询问/获取SCREENLAYOUT_SIZE_MASK
这是关键......
我在三星设备上尝试了 ONLY ,但它非常准确......
Context myAppContext = ...//load the context here...;
boolean amATablet = (myAppContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
if (amATablet) {
//Hello Tablet
}else{
//hello Phone
}
答案 1 :(得分:0)
好的伙计们,所以我对我的问题得到了可行的答案: 只需取消选中&#34;启用设备框架&#34;在模拟器设置中! 如果您需要进一步的帮助,可以使用以下链接: How to remove the device's frame on Android Studio's emulators
说了这么多,我不确定为什么这样有效。毕竟,这个设置的定义是:&#34;在Android模拟器窗口周围启用一个模仿真实Android设备外观的框架,这样根据我的理解,应该只改变外观。所以,如果有人知道原因,请发表进一步的答复或评论:)