android 兼容target33 android 兼容手机和平板
转载
手机上使用时效果图如下:
平板上使用时的效果图如下:
具体实现步骤如下
1)、新建一个项目工程,然后在其下的res目录下新建一个layout-large文件夹,然后在此文件夹下创建一个与主布局文件名字相同的布局文件,该布局文件用于当android检测到使用的设备是平板时加载。代码如下:
<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="horizontal">
<fragment
android:id="@+id/menu_fragment"
android:layout_width="0dip"
android:layout_weight="1.0"
android:layout_height="match_parent"
android:name="zjh.android.fragment.MenuFragment"/>
<FrameLayout
android:id="@+id/detail_layout"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="2">
</FrameLayout>
</LinearLayout>
|
2)、在res目录下的layout文件夹中的activity_main.xml主布局文件,用于当android检测到的使用的设备是手机时加载,具体代码如下:
<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">
<fragment
android:id="@+id/menu_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="zjh.android.fragment.MenuFragment"/>
</LinearLayout>
|
3)、在zjh.android.fragment包下新建一个继承自Fragment父类的MenuFragment.java类,用于判断用户使用的是何种设备,并进行相应的操作,具体实现代码如下:
package zjh.android.fragment;
import zjh.android.activity.DisplayActivity;
import zjh.android.activity.SoundActivity;
import zjh.android.main.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
@SuppressLint("NewApi")
public class MenuFragment extends Fragment implements OnItemClickListener{
/**
菜单界面中只包含了一个ListView。
*/
private ListView menuList;
/**
的适配器。
*/
private ArrayAdapter<String> adapter;
/**
用于填充ListView的数据,这里就简单只用了两条数据。
*/
private String[] menuItems = { "Sound", "Display" };
/**
是否是双页模式。如果一个Activity中包含了两个Fragment,就是双页模式。
*/
private boolean isTwoPane;
/**
当Activity和Fragment建立关联时,初始化适配器中的数据。
*/
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, menuItems);
}
/**
加载menu_fragment布局文件,为ListView绑定了适配器,并设置了监听事件。
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_fragment, container, false);
menuList = (ListView)view.findViewById(R.id.menu_list);
menuList.setAdapter(adapter);
menuList.setOnItemClickListener(this);
return view;
}
/**
当Activity创建完毕后,尝试获取一下布局文件中是否有details_layout这个元素,如果有说明当前
是双页模式,如果没有说明当前是单页模式。
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(getActivity().findViewById(R.id.detail_layout)!=null){
isTwoPane = true;
}else{
isTwoPane = false;
}
}
/**
处理ListView的点击事件,会根据当前是否是双页模式进行判断。如果是双页模式,则会动态添加Fragment。
如果不是双页模式,则会打开新的Activity。
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(isTwoPane){
Fragment fragment = null;
if(position==0){
fragment = new SoundFragment();
}else if(position==1){
fragment = new DisplayFragment();
}
getFragmentManager().beginTransaction().replace(R.id.detail_layout, fragment).commit();
}else{
Intent intent = null;
if(position==0){
intent = new Intent(getActivity(),SoundActivity.class);
Toast.makeText(getActivity(), "false", Toast.LENGTH_SHORT).show();
}else if(position==1){
intent = new Intent(getActivity(),DisplayActivity.class);
}
startActivity(intent);
}
}
}
|
4)、建立两个继承自Fragment父类的DisplayFragment.java和SoundFragment.java类用于当使用的设备为平板时加载相应操作的布局文件,具体的代码如下:
package zjh.android.fragment;
import zjh.android.main.R;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@SuppressLint("NewApi")
public class DisplayFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.display_fragment, container, false);
return view;
}
}
|
package zjh.android.fragment;
import zjh.android.main.R;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@SuppressLint("NewApi")
public class SoundFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.sound_fragment, container, false);
return view;
}
}
|
5)、在res目录下新建两个用来在平板设备上加载的布局文件,具体实现代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ff00"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="28sp"
android:textColor="#000000"
android:text="This is sound view"
/>
</RelativeLayout>
|
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0000ff"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="28sp"
android:textColor="#000000"
android:text="This is display view"
/>
</RelativeLayout>
|
6)、新建两个继承自Activity父类的SoundActivity.java和DisplayActivity.java的子类,用于当使用的设备为手机时加载相应操作的布局文件,具体实现代码如下:
package zjh.android.activity;
import zjh.android.main.R;
import android.app.Activity;
import android.os.Bundle;
public class SoundActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.sound_activity);
}
}
|
package zjh.android.activity;
import zjh.android.main.R;
import android.app.Activity;
import android.os.Bundle;
public class DisplayActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.display_activity);
}
}
|
接下来就是在res目录下新建两个用于当使用的设备是手机时被加载的布局文件,其代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="28sp"
这是在手机上运行的DisplayActivity"
/>
</LinearLayout>
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="28sp"
这是在手机上运行的SoundActivity"
/>
</LinearLayout>
|
由于当使用的设备是手机时进行的操作是Intent,所以还需要在AndroidMainfest.xml配置文件中添加对应的<activity/>,如下所示:
<activity android:name="zjh.android.activity.SoundActivity"/>
<activity android:name="zjh.android.activity.DisplayActivity"/>
|
此时,兼容手机和平板的Fragment例子就完成了。
源码下载
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。