安卓学习中遇到的问题及经验小记

xiaoxiao2021-02-28  98

安卓学习经验总结  1 click  与Onclick(); 的使用 2 val() 是一个方法,用于设置? 3  查看下面文档,关注点为里面的jQuery 代码调用等涉及到的基础规则问题  ? http://blog.csdn.net/dyllove98/article/details/9199599 4  栈的特点是 :先进先出  当前活动的Activity 位于栈顶 5 Service 与activity 的地位是并列的,他也代表了一个单独的Android组件。Service 与Activity 的区别在于:Service 通常为与后太运行,它一般不需要与用户 交互,因此service 组件没有图形用户界面 6 与activity 组件需要继承activity 基类类似,service 组件需要继承service基类。一个service组件被运行起来之后,他将拥有自己独立的生命周期,service组件 通常用于为其他组件提供后台服务后监控其它组件的运行状态。 7 broadcastReceiver 非常类似于事件编程中的监听器。与普通事件监听器不同的是,普通事件监听器监听得到事件源是程序中的对象;而BroadcastReceiver监听 的事件源是Android 应用中的其它组件。 8 intent 和intentFilter intent 并不是Android 应用的组件,但它对于Android应用的作用非常大——它是Android应用内不同组件之间通信的载体。当Android 运行是需要连接不同的 组件时,通常就需要借助于intent 来实现。intent 可以启动应用中另一个activity,也可以启动一个service 组件,还可以发送一条广播消息来触发系统中的 BroadReceiver. 也就是说,activity、service、BroadcastReceiver 三种组件之间的通信都以Intent 作为载体,只是不同组件使用intent 的机制略有区别而已 9 如果程序运行没有显示错误,但是直接挂掉,怎么办? 直接关掉eclipse和模拟器,重新启动软件 10 如何反复遍历数组中的元素,既能每个元素都能访问到,而且不出此范围? 经验发现来源: int currentImageId=0; int[] images=new int[]{ R.drawable.flowerf12,R.drawable.flowerf13,R.drawable.flowerf14,R.drawable.flowerf15, R.drawable.flowerf16,R.drawable.flowerf17,R.drawable.flowerf3,R.drawable.flowerf4, R.drawable.flowerf5,R.drawable.flowerf6,R.drawable.flowerf7,R.drawable.flowerf8 }; iv.setImageResource(images[currentImageId++%images.length]); 注意这里的 images[currentImageId++%images.length] 11 如何获取屏幕的大小? //获取窗口管理器 WindowManager widManager=getWindowManager(); Display display=widManager.getDefaultDisplay(); DisplayMetrics metrics=new DisplayMetrics(); //获取屏幕宽和高 display.getMetrics(metrics); 12 如何全屏显示? //全屏显示 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 13 如何去掉窗口标题? //去掉窗口标题 requestWindowFeature(Window.FEATURE_NO_TITLE); 14 如何实现点击一个按钮时,更改屏幕的方向? button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Configuration configuration=getResources().getConfiguration(); if (configuration.orientation==Configuration.ORIENTATION_LANDSCAPE) { MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } if (configuration.orientation==Configuration.ORIENTATION_PORTRAIT) { MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } }); 15 如何创建一个定时器,从0开始,每隔1000毫秒完成一件事? new Timer().schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(0x112); } },0, 1000); Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { if (msg.what==0x112) { //需要处理的内容 } }; }; 16 如何获取手机中sd卡上的"DCIM"文件? File dir=Environment.getExternalStorageDirectory();//获取sd卡的路径 File imgdir=new File(dir, "DCIM");// 获取sd卡上DCIM文件 File[] imgs=imgdir.listFiles();   //将DCIM文件夹中的所有文件进行列举放入一个数组中 17 如何创建 并开启一个异步任务? AsyncTask  task=new AsyncTask();//创建一个异步任务,而因为多数情况下,需要自定义AsyncTask,所以会用它的子类,重写一些方法 //class ImageAsynctask extends AsyncTask<Integer, Integer, Object>{ protected Bitmap doInBackground(Integer... params) {} protected void onPreExecute(){} protected void onPostExecute(Object result){} } // ImageAsyncTask task=new ImageAsyncTask(); task.execute(); 18 如何自定义一个view组件? (以自定义一个ImageView组件为例) 方法:定义一个Java类,继承要自定义的组件类型,重写其中的一些方法,对原组件扩展 public class ImageAsyncView extends ImageView{ protected void onDraw(Canvas canvas){ } } 19 如何更改listview的间隔条宽度,颜色? android:divider="#f00"  <!--  divider设定间隔条的颜色--> android:dividerHeight="8px"   <!--  dividerHeight设定间隔条的宽度--> 20 如果listview中,每个列表项的内容只有几个文字,如何用最简单的方法设定(不需要写适配器)?     方法:在activity的布局文件中写入这个,在Java代码中则不必做其他的任何处理 <ListView     android:id="@id/lvarray"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:entries="@array/books"   //因为这个,所以需要在res/values/中创建一个数组资源文件arrays即如下 </ListView> res/values/arrays文件中 <?xml version="1.0" encoding="utf-8"?> <resources>     <string-array name="books">         <item>疯狂Java讲义</item>         <item>疯狂Ajax讲义</item>         <item>疯狂Android讲义</item>         <item>疯狂xml讲义</item>         <item>疯狂web讲义</item>     </string-array>      </resources> 21 创建listView的几种方式:      (1)在布局文件中放置一个listView组件       (2)让activity 继承listActivity(相当于该activity显示的组件为ListView)。listactivity 里面包含了一个listView。 22 如何为listview填充数据 (1)不使用适配器(填充器) 直接在listview中添加一个entries属性,并为其设置。该值以资源文件的形式设置。 在res/values/arrays中定义 例如      <ListView      android:id="@id/lvarray"   android:layout_width="match_parent"   android:layout_height="match_parent"    android:entries="@array/books"   //因为这个,所以需要在res/values/中创建一个数组资源文件arrays即如下      </ListView> res/values/arrays文件中 <?xml version="1.0" encoding="utf-8"?> <resources>     <string-array name="books">         <item>疯狂Java讲义</item>         <item>疯狂Ajax讲义</item>         <item>疯狂Android讲义</item>         <item>疯狂xml讲义</item>         <item>疯狂web讲义</item>     </string-array>      </resources> (2)使用适配器:总体思路,获得lv控件——创建一个adapter对象——lv.setAdapter(适配器); (1) ArrayAdapter:   arrayAdapter有几个重载的构造函数,注意参数变化 ArrayAdapter<String> ada=new ArrayAdapter<String>(ListActivity.this, R.layout.list_item,R.id.tv, names); 参数为上下文  列表项布局文件   数组资源放的组件(控件)  数组资源 (2) SimpleAdapter:   也有几个不同的构造函数 ListView lv=(ListView) this.findViewById(R.id.lv); List<Map<String, Object>> data=new ArrayList<Map<String,Object>>(); initData(); SimpleAdapter sada=new SimpleAdapter(this, //布局文件资源 data, //数据资源 R.layout.list_item,  //列表项布局 new String[]{"icon","title","content","beizhu"},  //数据的关键字形成的数组 new int[]{R.id.ivicon,R.id.title1,R.id.content,R.id.iv2});  //数据的关键字所对应的列表项布局资源id形成的数组 lv.setAdapter(sada); private void initData() { Map<String, Object> item1=new HashMap<String, Object>(); item1.put("icon",R.drawable.img01); item1.put("title", "标题一"); item1.put("content", "内容部分一"); item1.put("beizhu", R.drawable.img02 ); data.add(item1); Map<String, Object> item2=new HashMap<String, Object>(); item2.put("icon", R.drawable.img03); item2.put("title", "标题二"); item2.put("content", "内容部分二"); item2.put("beizhu", R.drawable.img04 ); data.add(item2); } (3)可扩展baseAdapter: 需要新创建一个内部类,继承BaseAdapter,并重写其中的方法.(这里的) ListView lv=(ListView) this.findViewById(R.id.lv);  //找到控件lv List<Map<String, Object>> data=new ArrayList<Map<String,Object>>();  //定义一个list集合对象里面存储map类型的对象,方便扩展 initData(); BaseAdapter bada=new BaseAdapter() { @Override public View getView(int position, View convertView, ViewGroup parent) {     //为单个的列表项视图填充数据 if (data!=null) { Map<String, Object> item=(Map<String, Object>) getItem(position); if (item!=null) { LayoutInflater inflater=LayoutInflater.from(MainActivity.this); LinearLayout layout=(LinearLayout) inflater.inflate(R.layout.list_item, null);//注意控件要通过该布局layout找到 ImageView iv=(ImageView) layout.findViewById(R.id.iv); iv.setImageResource((Integer) item.get("icon"));     //绑定具体数据 TextView tv=(TextView) layout.findViewById(R.id.tv); tv.setText(item.get("text").toString()); return layout; } } return null; } @Override public long getItemId(int position) {     //获得列表项的编号 return position; } @Override public Object getItem(int position) {     //获取列表项中的数据 Map<String, Object> item=data.get(position); return item; } @Override public int getCount() {    //列表项的个数   return data.size(); } }; lv.setAdapter(bada);               //为lv绑定适配器 扩展:  可展开的列表项组件ExpandAbleListView  (这个用于制作二级菜单,是在baseAdapter的基础上进行的。是baseAdapter的嵌套。) 就是每个列表项,对应的内容还是个列表。因此在进行数据的适配时稍显麻烦,细节性问题较多,急需注意。下面附一个例子做参考。 布局文件: activity_main.xml:   <ExpandableListView         android:id="@id/elv"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="@string/hello_world" /> list_item.xml: <ImageView          android:id="@id/iv"         android:layout_width="150dp"         android:layout_height="150dp"         android:padding="10dp"/>     <TextView          android:id="@id/tv1"         android:layout_width="0dp"         android:layout_weight="1"         android:layout_height="wrap_content"         android:textSize="30dp"/> list_item2.xml: <TextView          android:id="@id/tv2"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:padding="10dp"         android:textSize="24dp"         android:layout_marginLeft="60pt"/> 代码文件: int[] logos=new int[]{ R.drawable.img08, R.drawable.img09, R.drawable.img10, }; private String[] names=new String[]{"神族兵战","虫族兵战","人族兵战"}; private String[][] args=new String[][]{ {"狂战士","龙骑士","黑暗圣堂","电兵","虎斗士"}, {"小狗","狸猫","飞龙"}, {"机枪兵","神弹兵","护士mm","大炮筒"} }; elv=(ExpandableListView) this.findViewById(R.id.elv);         ExpandableListAdapter elada=new ExpandableListAdapter() { @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public void registerDataSetObserver(DataSetObserver observer) {    } @Override public void onGroupExpanded(int groupPosition) {    } @Override public void onGroupCollapsed(int groupPosition) {    } @Override public boolean isEmpty() {    return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) {    return false; } @Override public boolean hasStableIds() {    return false; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (logos.length!=0) { LayoutInflater flater=LayoutInflater.from(MainActivity.this); LinearLayout layout=(LinearLayout) flater.inflate(R.layout.list_item1, null); ImageView iv1=(ImageView) layout.findViewById(R.id.iv); iv1.setImageResource(logos[groupPosition]); TextView tv1=(TextView) layout.findViewById(R.id.tv1); tv1.setText(names[groupPosition]); return layout; }   return null; } @Override public long getGroupId(int groupPosition) {    return groupPosition; } @Override public int getGroupCount() {    return logos.length; } @Override public Object getGroup(int groupPosition) {    return null; } @Override public long getCombinedGroupId(long groupId) {    return 0; } @Override public long getCombinedChildId(long groupId, long childId) {    return 0; } @Override public int getChildrenCount(int groupPosition) {    return args.length; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (args.length!=0) { LayoutInflater flater=LayoutInflater.from(MainActivity.this); LinearLayout layout=(LinearLayout) flater.inflate(R.layout.list_item2, null); TextView tv=(TextView) layout.findViewById(R.id.tv2); tv.setText((CharSequence) getChild(groupPosition, childPosition)); return layout; }   return null; } @Override public long getChildId(int groupPosition, int childPosition) {    return childPosition; } @Override public Object getChild(int groupPosition, int childPosition) {    return args[groupPosition][childPosition]; } @Override public boolean areAllItemsEnabled() {    return false; } }; elv.setAdapter(elada);     } 23 ListView扩展性的东西: AutoCompleteTextView(自动完成补全功能)  MultiAutoCompleteTextView   GridView   StackView   AdapterViewFlipper (1)AutoCompleteTextView以及它的扩展  MultiAutoCompleteTextView   下面例子中同时呈现了两个扩展性的控件 布局文件 <AutoCompleteTextView          android:id="@id/actv"                android:layout_width="match_parent"         android:layout_height="wrap_content"         android:completionHint="请选择您喜欢的图书"         android:dropDownHorizontalOffset="10dp"         android:completionThreshold="1"/> <MultiAutoCompleteTextView          android:id="@id/mauto"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:completionThreshold="1"/> 关键性代码: String[] books={ "疯狂Java讲义", "疯狂Android讲义", "疯狂xml讲义", "疯狂workflow讲义" }; AutoCompleteTextView actv=(AutoCompleteTextView) this.findViewById(R.id.actv); MultiAutoCompleteTextView mactv=(MultiAutoCompleteTextView) this.findViewById(R.id.mauto); ArrayAdapter<String> ada=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,books); actv.setAdapter(ada); mactv.setAdapter(ada); mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); (2)GridView: 布局文件: activity_main.xml:<GridView      android:id="@id/gridview"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:horizontalSpacing="1pt"     android:verticalSpacing="1pt"     android:numColumns="4"     android:gravity="center">          </GridView> cell.xml: <ImageView          android:id="@id/liiv"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/> 代码文件: int[] images=new int[]{ R.drawable.img01,R.drawable.img02,R.drawable.img03, R.drawable.img04,R.drawable.img05,R.drawable.img10, R.drawable.img11,R.drawable.img13,R.drawable.img12, R.drawable.img14,R.drawable.img09,R.drawable.img12, }; grview=(GridView) this.findViewById(R.id.gridview);         iv=(ImageView) this.findViewById(R.id.iv);                  List<Map<String, Object>> data=new ArrayList<Map<String,Object>>();         for (int i = 0; i < images.length; i++) { Map<String, Object> listitem=new HashMap<String, Object>(); listitem.put("icon", images[i]); data.add(listitem); }         SimpleAdapter sada=new SimpleAdapter(this, //上下文         data,                 //数据源         R.layout.cell,        //列表项布局文件         new String[]{"icon"},   //数据源中的关键字组成的数组         new int[]{R.id.iv});    //关键字对应资源的具体存放控件id组成的数组                  grview.setAdapter(sada);                  grview.setOnItemSelectedListener(new OnItemSelectedListener(         ) { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { iv.setImageResource(images[position]); } @Override public void onNothingSelected(AdapterView<?> arg0) { } });         grview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { iv.setImageResource(images[position]); } });       (3) StackView:   层叠在一起的 布局文件; activity_main.xml: <StackView        android:id="@id/mStackView"       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:loopViews="true">          </StackView> cell.xml:  <ImageView          android:id="@id/iv"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/> 代码文件: int[] images=new int[]{ R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04, R.drawable.img13,R.drawable.img12,R.drawable.img11,R.drawable.img10 }; StackView sv=(StackView) this.findViewById(R.id.mStackView); List<Map<String, Object>> data=new ArrayList<Map<String,Object>>();         for (int i = 0; i < images.length; i++) { Map<String, Object> item=new HashMap<String, Object>(); item.put("icon", images[i]); data.add(item); }         SimpleAdapter sada=new SimpleAdapter(this, //上下文         data,                 //数据源         R.layout.cell,        //列表项布局文件         new String[]{"icon"},   //数据源中的关键字组成的数组         new int[]{R.id.iv});    //关键字对应资源的具体存放控件id组成的数组         sv.setAdapter(sada);     (4) AdapterViewFlipper: 布局文件: <AdapterViewFlipper         android:id="@id/flipper"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:flipInterval="3000"         android:layout_alignParentTop="true"/> 代码文件: int[] images=new int[]{ R.drawable.img01,R.drawable.imgl1,R.drawable.imgl10,R.drawable.imgl11, R.drawable.imgl12,R.drawable.imgl13,R.drawable.imgl2,R.drawable.imgl3, R.drawable.imgl4,R.drawable.imgl5,R.drawable.imgl6,R.drawable.imgl7, R.drawable.imgl8,R.drawable.imgl9,R.drawable.imgl10,R.drawable.imgl5 }; AdapterViewFlipper   avf=(AdapterViewFlipper) this.findViewById(R.id.flipper); BaseAdapter bada=new BaseAdapter() { @Override public View getView(int position, View convertView, ViewGroup parent) { //创建Imageview ImageView imageView=new ImageView(MainActivity.this); //加载图片资源 imageView.setImageResource(images[position]); //设置imageview的类型适配方式 imageView.setScaleType(ImageView.ScaleType.FIT_XY); //设置imageview的布局适配方式 imageView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); return imageView; } @Override public long getItemId(int position) { return position; } @Override public Object getItem(int position) { return position; } @Override public int getCount() { return images.length; } }; avf.setAdapter(bada);          /  1、 intent 的用法: Intent 意图相关知识 intent 有两种打开方式,显式意图和隐式意图 intent 与intent-filter   intent 可以看作招聘单位的招聘要求,intent-filter 可以看作是应聘者的简历 应聘者intent中 intent-filter中最常用的属性是  action 和category   而招聘单位通过发布要求 setAction ()  和 addCategory() 进行招聘,招聘单位的setaction() 要求应聘者intent只需满足一个即可,但是 addCategory()可以有多个,而且addCategory()必须全部满足 自定义的intent-filter 必须加入默认的<category android:name="android.intent.category.DEFAULT" /> (可以当做应聘者默认情况下必须是个人) intent的另一个属性componentName 属性,是基础,一般用对它进行过包装的方法 举例代码: 公司要求 :   public void onClick(View v) { switch (v.getId()) { case R.id.btn1:   //方法一和方法二一致,方法二是方法一的包装 ComponentName component=new ComponentName(this, SecondActivity.class); Intent intent=new Intent(); intent.setComponent(component); this.startActivity(intent); break; case R.id.btn2: Intent intent2=new Intent(this, SecondActivity.class); startActivity(intent2); break; case R.id.btn3:    //action只要intent-filter中有一个匹配即可,category必须全部匹配               //从结构上看,action 是set方法,即便多设置,后者会覆盖前者,但action是   //add方法,可以增加 Intent intent3=new Intent(); intent3.setAction("programer1"); intent3.addCategory("c01"); intent3.addCategory("c02"); intent3.addCategory("c03"); intent3.addCategory("c04"); this.startActivity(intent3); break; } } 应聘者: 清单文件中配置的信息,可以看作应聘者的简历 <activity             android:name=".SecondActivity"             android:label="@string/title_activity_second">            <intent-filter>                <action android:name="programer1"/>                <action android:name="programer2"/>                <action android:name="programer3"/>                <category android:name="c01"/>                <category android:name="c02"/>                <category android:name="c03"/>                <category android:name="c04"/>            </intent-filter>         </activity> 2、 如何创建一个碎片 或者片段  fragment? 思路:  1、创建一个Fragment的子类,即创建一个类,继承自Fragment 2、重写需要的方法,onCreate() onCreateView() 等相关方法,当然也可以创建构造函数,供外界使用 例如:(此例中只是根据需要重写了一个方法 imgid是根据项目实例加上的,可以没有的) public class DetailFragment extends Fragment{ int imgid; MainActivity activity; public DetailFragment() { } public DetailFragment(int imgid){ this.imgid=imgid; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //找到详细信息的布局文件 View view=inflater.inflate(R.layout.fragment_detail, null); ImageView iv=(ImageView) view.findViewById(R.id.tv); iv.setBackgroundResource(imgid); return view;//返回碎片的布局视图 } } 3、如何使用或者引用创建的碎片? //下面连续写的好处,代码少,不用导很多包 //fragmentmanager //fragmenttransaction //begintransaction //add/replace //commit this.getFragmentManager() .beginTransaction() .add(R.id.content,new DetailFragment(imgid), "detail") .commit(); 注:这里使用的new DetailFragment(imgid),使用的是这个碎片文件, public class DetailFragment extends Fragment{ int imgid; MainActivity activity; public DetailFragment() { } public DetailFragment(int imgid){ this.imgid=imgid; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //找到详细信息的布局文件 View view=inflater.inflate(R.layout.fragment_detail, null); ImageView iv=(ImageView) view.findViewById(R.id.tv); iv.setBackgroundResource(imgid); return view;//返回碎片的布局视图 } } 4、如何按照横屏 竖屏两种不同方式设置具体的布局文件: 思路: 1、根据某些标志判断出横屏和竖屏; 2、根据横屏和竖屏的不同布局方式进行布局 例子:此处附加一个根据横竖屏设置不同布局,并且布局中需要使用不同的碎片的项目实例, 该实例实现了, 竖屏时,主界面显示一个列表,点击列表项,可以看到内容详情(内容详情显示在一个新的activity) 横屏时,屏幕较大,左边显示列表项,右边显示点击列表项看到的详情页 无论横屏还是竖屏,这里的内容详情部分都是动态加载的碎片(就是在内容详情所在的activity中创建使用一个碎片fragment) 因为碎片一定是activity的一部分,所以必须把fragment加载入一个activity中 项目实现思路: 因为横竖屏时,界面含有的小组件不同,可以应用判断是否含有某个id值来区分横竖屏 设置两个activity    MainActivity    DetailActivity ,一个fragment,DetailFragment  四个布局文件  activity_detail.xml  activity_main_land.xml  activity_main.xml   fragment_detail.xml 在res目录下,创建一个values-land(这个表示横屏时的布局)文件夹,文件夹中创建一个refs.xml(这个名称必须这样命名)的文件 refs.xml: <?xml version="1.0" encoding="utf-8"?> <resources>     <item type="layout"  name="activity_main">@layout/activity_main_land</item> </resources> activity_main.xml: <RelativeLayout 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"     tools:context="${relativePackage}.${activityClass}" >     <ListView         android:id="@id/lv"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:entries="@array/item_books"         android:background="@color/list_bg"/> </RelativeLayout> activity_main_land.xml: <?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="horizontal"      android:baselineAligned="false" >     <ListView          android:id="@id/lv"         android:layout_width="200dp"         android:layout_height="match_parent"       android:entries="@array/item_books"       android:background="@color/list_bg">              </ListView>     <FrameLayout          android:id="@id/content"         android:layout_width="0dp"         android:layout_height="match_parent"         android:layout_weight="1">              </FrameLayout> </LinearLayout> activity_detail.xml: <RelativeLayout 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"     tools:context="${relativePackage}.${activityClass}"      android:id="@id/root"> </RelativeLayout> fragment_detail.xml: <?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"      android:gravity="center">          <ImageView          android:id="@id/tv"         android:layout_gravity="center"         android:layout_width="match_parent"         android:layout_height="match_parent"/> </LinearLayout> MainActivity.java: public class MainActivity extends Activity implements OnItemClickListener{ ListView lv; int imgid; int[] imgs={R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.imgs014,R.drawable .imgs015,R.drawable.imgs016}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv=(ListView) this.findViewById(R.id.lv); lv.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { this.imgid=this.imgs[position]; //此处通过判断是否含有某个可以作为身份标识的id判断屏幕是横屏还是竖屏(技巧) //动态加载碎片fragment //横屏 可以直接在该activity的(布局中)存放碎片的父容器动态加载碎片 if (this.findViewById(R.id.content)!=null) { //下面连续写的好处,代码少,不用导很多包 //fragmentmanager //fragmenttransaction //begintransaction //add/replace //commit this.getFragmentManager() .beginTransaction() .add(R.id.content,new DetailFragment(imgid), "detail") .commit(); }else { //竖屏  竖屏时,是两个activity,所以用intent启动activity的方式打开 //在新的详情界面activity中动态加载碎片,传递的参数可以通过intent传递 Intent intent=new Intent(this,DetailActivity.class); intent.putExtra("img", imgid); this.startActivity(intent); } } } DetailActivity.java: public class DetailActivity extends Activity { int imgid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); //获取传递的参数,图片id imgid=getIntent().getIntExtra("img", -1); //详情界面    动态加载fragment 片段 this.getFragmentManager() .beginTransaction() .add(R.id.root,new DetailFragment(imgid), "detail") .commit();//add()方法中三个参数分别表示fragment存放容器,fragment ,一般的标识参数 } } DetailFragment.java: public class DetailFragment extends Fragment{ int imgid; MainActivity activity; public DetailFragment() { } public DetailFragment(int imgid){ this.imgid=imgid; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //找到详细信息的布局文件 View view=inflater.inflate(R.layout.fragment_detail, null); ImageView iv=(ImageView) view.findViewById(R.id.tv); iv.setBackgroundResource(imgid); return view;//返回碎片的布局视图 } } 5、 图片放上去之后无法铺满? 将图片以背景Background()的方法设置上去, 6 background 设置图片与src设置图片的区别? background 会拉伸图片,以铺满整个容器 src 不会自动拉伸,如果设置某个方向铺满,则图片可能会按照一定的比例进行缩放,可能出现白边的现象 7 adpaterViewFlipper  在利用baseAdapter 进行设置图片时, public View getView(int position, View convertView, ViewGroup parent) { //这里的MainActivity.this 进行设置时,指的是当前adpaterViewFlipper 所在的activity的映射 ImageView iv=new ImageView(MainActivity.this); iv.setImageResource(imgs[position]); //设置方式是水平垂直适合 iv.setScaleType(ImageView.ScaleType.FIT_XY); //设置imageview的布局适配方式  适应父容器 iv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); return iv; } 8 设置轮播图的方式有哪些?      (1)使用viewFlipper        (2) 使用adapterViewFlipper       (3) 使用普通的图片控件 ImageView + 异步加载的方式      (4)普通图片ImageView + 开发新线程  
转载请注明原文地址: https://www.6miu.com/read-28287.html

最新回复(0)