现在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插件,通过这个插件可以模拟不同的浏览器头(当然,这个只是模拟了浏览器头,浏览器的内核是不会有任何变化的)。