现在Fragment被使用的也比较多了,官方也在推荐使用Fragment,尤其是平板上开发显得非常的方便,这里我是在手机里展示的,可以先看一下效果图。
实现也是比较的简单,activity的布局文件里,有两个控件,一个是titles,一个是details, titles是通过指定了了对应的F绕过梦来展现的内容,Fragment本身是一个View,有自己的生命周期。这个Demo里点击titles里的目录在右侧可以显示对应的详情信息。右侧放的是一个Framlayout,在代码里通过语句
DetailsFragment df = (DetailsFragment)getFragmentManager().findFragmentById(R.id.details);
来显示DetailsFragment,把点击的位置通过,DetailsFragment里的静态方法传递过去,返回的是对应的Fragment,在得到了Fragment之后,ft.replace(R.id.details, df);将其显示出来。TitleFragment里面主要就是做了这么多工作。在DetailsFragment里面接收到对应的参数之后(getArguments().getInt("index");),把所对应的详细信息给展示出来。
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}public class TitleFragment extends ListFragment {
boolean mDualPane; //检验是否有DetailFragment,没有就另起一个activity
int mCurCheckPosition;
public void onSaveInstanceState (Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("curPosition", mCurCheckPosition);
}
@Override
//初始化TitleFragment
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,TITLES));
View detailsFrame = getActivity().findViewById(R.id.details);
mDualPane = detailsFrame != null && detailsFrame.getVisibility()==View.VISIBLE;
if(savedInstanceState != null){
mCurCheckPosition = savedInstanceState.getInt("curPosition",0);
}
if(mDualPane){
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
showDetails(mCurCheckPosition);
}
}
public void onListItemClick(ListView l, View v, int position, long id){
showDetails(position);
}
//显示选中Item对于的内容
private void showDetails(int position) {
int index = position;
if(mDualPane){
getListView().setItemChecked(index, true);
DetailsFragment df = (DetailsFragment)getFragmentManager().findFragmentById(R.id.details);
if(df == null || df.getShowIndex() != index){
df = DetailsFragment.newInstance(index);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.details, df);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
}
}
public static final String[] TITLES =
{
"Henry IV (1)",
"Henry V",
"Henry VIII",
"Richard II",
"Richard III",
"Merchant of Venice",
"Othello",
"King Lear"
};
}
public class DetailsFragment extends Fragment{
//方法newInstance用于新建一个DetailFragment
public static DetailsFragment newInstance(int index){
DetailsFragment f = new DetailsFragment();
Bundle bundle = new Bundle();
bundle.putInt("index", index);
//给Fragment初始化参数
f.setArguments(bundle);
return f;
}
//产生显示内容的View
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
if(container == null){
return null;
}
ScrollView scroller = new ScrollView(getActivity());
TextView text = new TextView(getActivity());
//设置TextView边框大小
int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());
text.setPadding(padding,padding,padding,padding);
scroller.addView(text);
text.setText(DIALOGUE[getShowIndex()]);
return scroller;
}
//获取新建DetailFragment时声明的参数
public int getShowIndex(){
return getArguments().getInt("index");
}Demo下载
感觉ar挺好玩的、所以研究了一下、简单的说一下吧、首先去官网下载sdk我用的是untiy3d、下载地址:https://developer.vuforia.com/resources/sdk/unity,虽然不大、但是下载速度太慢了、然后新建一个工程、把这个sdk包导进去、具体怎么导就不用我细说了、自己找一张照片去官网加工一下,加工地址:https://developer.vuforia.com/targetmanager/deviceTarget/createNonCloudTarget,加工好以后下载下来、导进之前这个工程、然后把ARCamera 的属性设置一下,如图:,然后把ImageTarget预制的属性也设置一下:,旋转自己加工的那个图片,然后再ImageTarget下加上自己要出现的效果、我这里加了一个粒子系统:,然后调整一下摄像机的位置、能够看到图片,和要出现的效果就可以、然后导出来,android或ios应该都可以、我只是导了个android的、ios的没试、然后在android手机上运行、效果能出来、
文采不太好、、、、、
现在越来越多的手机开始支持HTML5等一些新技术,原本只能通过图片和Flash来实现的东西,可以通过HTML5来实现了。但是我们给用户的WAP站的入口只有一个,这就需要判别手机操作系统和手机浏览器后,自动跳转到适合的版本(3G版或者触屏版)。
验证跳转的效果,我们可以通过手机来进行测试,但是仅仅为了测试这个功能,拿那么多手机来测试,个人感觉太过于浪费,况且我们的手头的测试手机也不可能一下子就那么齐全,因此我们可以借助浏览器的User_Agent切换的工具。本人用的是Chrome浏览器下的User_Agent Switcher插件,通过这个插件可以模拟不同的浏览器头(当然,这个只是模拟了浏览器头,浏览器的内核是不会有任何变化的)。