我目前正在学习Android Studio开发,但偶然发现了一个教程的练习(坚持了将近2周)。 它要求我使用Fragment来创建这种外观:
这是我的代码:
home.java
public class home extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Intent previousIntent = getIntent();
String username = previousIntent.getStringExtra("username");
Bundle sendDataToBody = new Bundle();
sendDataToBody.putString("username", username);
// Fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
WindowManager windowManager = getWindowManager();
Point size = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
windowManager.getDefaultDisplay().getSize(size);
if (size.x > size.y) {
// landscape
Menu fragmentMenu = new Menu();
body fragmentBody = new body();
fragmentBody.setArguments(sendDataToBody);
fragmentTransaction.add(R.id.menuFrame, fragmentMenu);
fragmentTransaction.add(R.id.bodyFrame, fragmentBody);
} else {
// portrait
Menu fragmentMenu = new Menu();
fragmentTransaction.add(R.id.menuFrame, fragmentMenu);
}
} else {
Display display = windowManager.getDefaultDisplay();
if (display.getRotation() == Surface.ROTATION_90
|| display.getRotation() == Surface.ROTATION_270) {
// landscape
Menu fragmentMenu = new Menu();
body fragmentBody = new body();
fragmentBody.setArguments(sendDataToBody);
fragmentTransaction.add(R.id.menuFrame, fragmentMenu);
fragmentTransaction.add(R.id.bodyFrame, fragmentBody);
} else {
//portrait
Menu fragmentMenu = new Menu();
fragmentTransaction.add(R.id.menuFrame, fragmentMenu);
}
}
fragmentTransaction.commit();
// End of Fragment
}
}
和我的home.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/container_padding_vertical"
android:paddingBottom="@dimen/container_padding_vertical"
android:paddingRight="@dimen/container_padding_horizontal"
android:paddingLeft="@dimen/container_padding_horizontal"
android:orientation="vertical"
tools:context=".home">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/menuFrame"></FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/bodyFrame"></FrameLayout>
</LinearLayout>
如您所见, 如果我运行这些代码,则在纵向模式下可以用作图片。
但是当我将方向更改为横向时, 按钮仍然全屏显示。
如何将按钮更改为仅与图片类似的部分?
注意:这是我在关于Android的stackOverflow中的第一个问题。我希望我的解释足够清楚
修改
这是我的menuFragment.xml
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
tools:context=".Menu">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/convertBtn"
android:text="Convert USD/IDR" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/logoutBtn"
android:text="Logout"/>
</LinearLayout>
这是我的bodyFragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
tools:context=".body">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/username_show"/>
</LinearLayout>
答案 0 :(得分:0)
您要在此处使用资源框架为您的每个片段和活动提供两种不同的布局。一种布局用于纵向,另一种布局用于横向。
结构如下:
res/
layout/
activity_home.xml
fragment_body.xml
fragment_menu.xml
layout-land/
activity_home.xml
fragment_body.xml
fragment_menu.xml
您无需在代码中执行任何操作。只需在“活动”中使用setContentView(R.layout.activity_home)
,系统就会自动为您选择正确的版本(人像或风景)。
类似地,您可以在片段中输入inflater.inflate(R.layout.fragment_body, parent, false)
,然后会自动为您选择正确的版本。
现在,您只需要确保不同的xml文件即可完成您想要的操作。例如,在肖像中,您可以使按钮与屏幕宽度匹配:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
.../>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
.../>
但是在您的环境中,您可以将按钮包装起来:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
.../>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
.../>
只要在横向和纵向版本中使用相同的id
,一切都会“正常”。