在我的应用程序中 - 我刚刚为手机设计了Fragment选项卡。我想移植此应用程序以满足平板电脑设备。如果它是平板电脑,我希望方向设置为横向,如果是手机,我希望设置为纵向。由于我正在使用片段,我想利用在单个页面上并排显示我的片段的工具,并导航到电话中的不同片段,如下所述:
到目前为止,我正在使用Main活动并在此处定义我的标签:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab1 = actionBar.newTab().setIcon(R.drawable.tab1);
Tab1.setTag("Tab1");
Tab2 = actionBar.newTab().setIcon(R.drawable.tab2);
Tab2.setTag("Tab2");
Tab3 = actionBar.newTab().setIcon(R.drawable.tab3);
Tab3.setTag("Tab3");
Tab1.setTabListener(new TabListener(fragmentTab1));
Tab2.setTabListener(new TabListener(fragmentTab2));
Tab3.setTabListener(new TabListener(fragmentTab3));
actionBar.addTab(Tab1);
actionBar.addTab(Tab2);
actionBar.addTab(Tab3);
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
我设置了一个标签监听器,如下所示:
public class TabListener implements ActionBar.TabListener {
Fragment fragment;
public TabListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
第一个标签片段类签名:
public class FragmentTab1 extends Fragment
第一个Tab(FragmentTab1)OnCreateView:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragmenttab1, container, false);
}
FragmentTab1的XML:(fragmenttab1.xml):
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:facebook="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_app" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="14dp"
android:layout_marginRight="03dp"
android:layout_marginTop="45dp"
android:cacheColorHint="#00000000"
android:fastScrollEnabled="true"
android:listSelector="@android:color/transparent" >
</ListView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="0dp" >
<AutoCompleteTextView
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/search"
android:ems="8"
android:hint="Search Contacts"
android:paddingLeft="36dp"
android:textColor="#FFFFFF" >
</AutoCompleteTextView>
</RelativeLayout>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|top"
android:layout_marginTop="10dp"
android:visibility="invisible" />
</FrameLayout>
现在在上面我已经为listview行设置了一个onCLick监听器 - 在手机中我打开一个新的片段,但是在标签中我想在Landscape模式下并排显示FragmentTab1和这个片段。我该如何实现这一目标?
答案 0 :(得分:1)
您需要在 res / layout-large / 中为平板电脑大小的屏幕创建单独的布局。或者在 res / layout-large-land / 中。后者是指在平板电脑显示平板电脑时,您只需要平板电脑的备用布局。在其中,您为片段创建了两个占位符,通常是第一个列表和第二个中的详细视图,就像问题中的图像一样。
在onClick Listener中,您可以检查第二个片段占位符的存在,其中包含以下内容:
if (findViewById(R.id.second_fragment_container) == null)
{
// the single fragment view is displayed - execute as your current listener
// replacing the fragment container
}
else
{
// Your duel fragment specific version.
// replace only the second container, leaving the first displayed.
}
您可能会发现android开发者网站的以下部分有用: