//xlv适配器
package com.bwie.fragment;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.ImageView;import android.widget.LinearLayout;import com.bwie.Adapter.MyAdapter;import com.bwie.Bean.Bean;import com.bwie.Bean.Utils;import com.bwie.dongshaohua20170920.MainActivity;import com.bwie.dongshaohua20170920.R;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask;import me.maxwin.view.XListView;/** * Created by *** on 2017/9/20. */public class fragment01 extends Fragment implements XListView.IXListViewListener{ private static final String JSON_URL="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"; ViewPager pager; LinearLayout layout; XListView xListView; List<Bean.NewslistBean> newslist; List<ImageView> imglist=new ArrayList<>(); List<View> viewList=new ArrayList<>(); MyAdapter adapter; int imgcount=0; int viewcount=0; Handler handler=new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); pager.setCurrentItem(imgcount); viewList.get(viewcount).setBackgroundResource(R.drawable.item1); viewList.get(imgcount%viewList.size()).setBackgroundResource(R.drawable.item2); viewcount=imgcount%viewList.size(); } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获取自定义视图 View view=inflater.inflate(R.layout.fragment01,null); View v=View.inflate(getActivity(),R.layout.headview,null); //初始化控件获取id pager= (ViewPager)v.findViewById(R.id.viewpager); layout= (LinearLayout)v.findViewById(R.id.linear); xListView=view.findViewById(R.id.list); xListView.setPullLoadEnable(true);//设置可上拉下拉 xListView.setXListViewListener(this);//设置监听 xListView.addHeaderView(v); //异步加载 new AsyncTask<String,Integer,String>() { @Override protected String doInBackground(String... strings) { String str=new Utils().getGson(JSON_URL); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析Gson串 Bean bean=new Gson().fromJson(s,Bean.class); newslist=bean.getNewslist(); //初始化适配器 adapter=new MyAdapter(getActivity(),newslist); xListView.setAdapter(adapter); getImg();//加载图片 getYu();//加载小圆点 //添加适配器 pager.setAdapter(new PagerAdapter() { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imglist.get(position%imglist.size())); } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView=imglist.get(position%imglist.size()); ViewParent parent = imageView.getParent(); if(parent != null){ ViewGroup viewGroup = (ViewGroup) parent; viewGroup.removeAllViews(); } container.addView(imageView); return imageView; } }); //设置当前显示页 pager.setCurrentItem(3000); //设置第一个小圆点为选中状态 viewList.get(0).setBackgroundResource(R.drawable.item2); Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { imgcount=pager.getCurrentItem()+1; handler.sendEmptyMessage(0); } },2000,3000); } }.execute(); return view; } //加载图片 public void getImg() { imglist.clear(); for (int i=0;i<newslist.size();i++) { ImageView imageView=new ImageView(getActivity()); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(newslist.get(i).getPicUrl(),imageView); imglist.add(imageView); } } //加载小圆点 public void getYu() { viewList.clear(); for (int i=0;i<imglist.size();i++) { //加载布局 View view= LayoutInflater.from(getActivity()).inflate(R.layout.item_second,null); View v=view.findViewById(R.id.view); viewList.add(v); layout.addView(view); } } public void onLoad() { xListView.stopLoadMore(); xListView.stopRefresh(); xListView.setRefreshTime(""); } //下拉刷新 @Override public void onRefresh() { new AsyncTask<String,Integer,String>() { @Override protected String doInBackground(String... strings) { String str=new Utils().getGson(JSON_URL); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析Gson串 Bean bean=new Gson().fromJson(s,Bean.class); newslist=bean.getNewslist(); //初始化适配器 adapter=new MyAdapter(getActivity(),newslist); xListView.setAdapter(adapter); onLoad(); } }.execute(); } //上拉加载 @Override public void onLoadMore() { new AsyncTask<String,Integer,String>() { @Override protected String doInBackground(String... strings) { String str=new Utils().getGson(JSON_URL); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析Gson串 Bean bean=new Gson().fromJson(s,Bean.class); List<Bean.NewslistBean> slist=bean.getNewslist(); newslist.addAll(slist); adapter.notifyDataSetChanged(); onLoad(); } }.execute(); }}
//ImageLoader配置
package com.bwie.Bean;import android.app.Application;import android.graphics.Bitmap;import android.os.Environment;import com.bwie.dongshaohua20170920.R;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.ImageScaleType;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;import java.io.File;/** * Created by *** on 2017/9/20. */public class Myapplication extends Application{ @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this) .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽 .discCacheExtraOptions(480, 800, null) // Can slow ImageLoader, use it carefully (Better don't use // it)/设置缓存的详细信息,最好不要设置这个 .threadPoolSize(3) // 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache // implementation/你可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) .discCacheSize(50 * 1024 * 1024) .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的URI名称用MD5 加密 .tasksProcessingOrder(QueueProcessingType.LIFO) .discCacheFileCount(100) // 缓存的文件数量 .discCache( new UnlimitedDiskCache(new File(Environment .getExternalStorageDirectory() + "/myApp/imgCache"))) // 自定义缓存路径 .defaultDisplayImageOptions(getDisplayOptions()) .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) .writeDebugLogs() // Remove for release app .build();// 开始构建 ImageLoader.getInstance().init(config); } private DisplayImageOptions getDisplayOptions() { DisplayImageOptions options; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片在下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中 .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// // .delayBeforeLoading(int delayInMillis)//int // delayInMillis为你设置的下载前的延迟时间 // 设置图片加入缓存前,对bitmap进行设置 // .preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位 .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少 .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间 .build();// 构建完成 return options; }}
//主界面
package com.bwie.dongshaohua20170920;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.widget.DrawerLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ListView;import android.widget.RadioGroup;import android.widget.Toast;import com.bwie.fragment.fragment01;import com.bwie.fragment.fragment02;import com.bwie.fragment.fragment03;import com.bwie.fragment.fragment04;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { ViewPager viewPager; RadioGroup radioGroup; List<Fragment> list; ListView listView; DrawerLayout drawerLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件获取id viewPager= (ViewPager)findViewById(R.id.layout_pager); radioGroup= (RadioGroup) findViewById(R.id.radiogroup); drawerLayout= (DrawerLayout) findViewById(R.id.activity_main); listView= (ListView) findViewById(R.id.draw); drawerLayout.openDrawer(listView); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this,"asb",Toast.LENGTH_LONG).show(); } }); //适配数据 list=new ArrayList<>(); list.add(new fragment01()); list.add(new fragment02()); list.add(new fragment03()); list.add(new fragment04()); //ViewPager添加适配器 viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { //Fragment f = list.get(position); return list.get(position); } @Override public int getCount() { return list.size(); } }); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: radioGroup.check(R.id.shouye); break; case 1: radioGroup.check(R.id.video); break; case 2: radioGroup.check(R.id.top); break; case 3: radioGroup.check(R.id.xiaoshipin); break; } } @Override public void onPageScrollStateChanged(int state) { } }); //点击事件 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i) { case R.id.shouye: viewPager.setCurrentItem(0); break; case R.id.video: viewPager.setCurrentItem(1); break; case R.id.top: viewPager.setCurrentItem(2); break; case R.id.xiaoshipin: viewPager.setCurrentItem(3); break; } } }); }}
//主Fragment界面
package com.bwie.fragment;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.ImageView;import android.widget.LinearLayout;import com.bwie.Adapter.MyAdapter;import com.bwie.Bean.Bean;import com.bwie.Bean.Utils;import com.bwie.dongshaohua20170920.MainActivity;import com.bwie.dongshaohua20170920.R;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask;import me.maxwin.view.XListView;/** * Created by *** on 2017/9/20. */public class fragment01 extends Fragment implements XListView.IXListViewListener{ private static final String JSON_URL="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"; ViewPager pager; LinearLayout layout; XListView xListView; List<Bean.NewslistBean> newslist; List<ImageView> imglist=new ArrayList<>(); List<View> viewList=new ArrayList<>(); MyAdapter adapter; int imgcount=0; int viewcount=0; Handler handler=new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); pager.setCurrentItem(imgcount); viewList.get(viewcount).setBackgroundResource(R.drawable.item1); viewList.get(imgcount%viewList.size()).setBackgroundResource(R.drawable.item2); viewcount=imgcount%viewList.size(); } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获取自定义视图 View view=inflater.inflate(R.layout.fragment01,null); View v=View.inflate(getActivity(),R.layout.headview,null); //初始化控件获取id pager= (ViewPager)v.findViewById(R.id.viewpager); layout= (LinearLayout)v.findViewById(R.id.linear); xListView=view.findViewById(R.id.list); xListView.setPullLoadEnable(true);//设置可上拉下拉 xListView.setXListViewListener(this);//设置监听 xListView.addHeaderView(v); //异步加载 new AsyncTask<String,Integer,String>() { @Override protected String doInBackground(String... strings) { String str=new Utils().getGson(JSON_URL); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析Gson串 Bean bean=new Gson().fromJson(s,Bean.class); newslist=bean.getNewslist(); //初始化适配器 adapter=new MyAdapter(getActivity(),newslist); xListView.setAdapter(adapter); getImg();//加载图片 getYu();//加载小圆点 //添加适配器 pager.setAdapter(new PagerAdapter() { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imglist.get(position%imglist.size())); } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView=imglist.get(position%imglist.size()); ViewParent parent = imageView.getParent(); if(parent != null){ ViewGroup viewGroup = (ViewGroup) parent; viewGroup.removeAllViews(); } container.addView(imageView); return imageView; } }); //设置当前显示页 pager.setCurrentItem(3000); //设置第一个小圆点为选中状态 viewList.get(0).setBackgroundResource(R.drawable.item2); Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { imgcount=pager.getCurrentItem()+1; handler.sendEmptyMessage(0); } },2000,3000); } }.execute(); return view; } //加载图片 public void getImg() { imglist.clear(); for (int i=0;i<newslist.size();i++) { ImageView imageView=new ImageView(getActivity()); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(newslist.get(i).getPicUrl(),imageView); imglist.add(imageView); } } //加载小圆点 public void getYu() { viewList.clear(); for (int i=0;i<imglist.size();i++) { //加载布局 View view= LayoutInflater.from(getActivity()).inflate(R.layout.item_second,null); View v=view.findViewById(R.id.view); viewList.add(v); layout.addView(view); } } public void onLoad() { xListView.stopLoadMore(); xListView.stopRefresh(); xListView.setRefreshTime(""); } //下拉刷新 @Override public void onRefresh() { new AsyncTask<String,Integer,String>() { @Override protected String doInBackground(String... strings) { String str=new Utils().getGson(JSON_URL); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析Gson串 Bean bean=new Gson().fromJson(s,Bean.class); newslist=bean.getNewslist(); //初始化适配器 adapter=new MyAdapter(getActivity(),newslist); xListView.setAdapter(adapter); onLoad(); } }.execute(); } //上拉加载 @Override public void onLoadMore() { new AsyncTask<String,Integer,String>() { @Override protected String doInBackground(String... strings) { String str=new Utils().getGson(JSON_URL); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析Gson串 Bean bean=new Gson().fromJson(s,Bean.class); List<Bean.NewslistBean> slist=bean.getNewslist(); newslist.addAll(slist); adapter.notifyDataSetChanged(); onLoad(); } }.execute(); }}
//Fragment的主页面
package com.bwie.fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.bwie.dongshaohua20170920.R;import java.util.ArrayList;import java.util.List;/** * Created by *** on 2017/9/20. * fragment02 */public class fragment02 extends Fragment { TabLayout tabLayout; ViewPager pager; List<String> list; List<Fragment> fragments=new ArrayList<>(); String[] comnius={"推荐","关注","城市","国内","国际","军事","娱乐","头条"}; private static final String JSON_URL="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //加载自定义布局 View view=inflater.inflate(R.layout.fragment02,null); //初始化控件获取id tabLayout=view.findViewById(R.id.tablayout); pager=view.findViewById(R.id.frag_viewpager); list=new ArrayList<>(); list.clear();//清空集合 for (int i=0;i<comnius.length;i++) { list.add(comnius[i]); } for(int i=0;i<list.size();i++) { NewFragment fragment=new NewFragment(); Bundle bundle=new Bundle(); bundle.putString("name",JSON_URL); fragment.setArguments(bundle); fragments.add(fragment); } pager.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return list.size(); } @Override public CharSequence getPageTitle(int position) { return list.get(position); } }); tabLayout.setupWithViewPager(pager); return view; }}
//第三个Fragment页面
package com.bwie.fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.bwie.dongshaohua20170920.R;/** * Created by *** on 2017/9/20. * fragment03 */public class fragment03 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //加载自定义布局 View view=inflater.inflate(R.layout.fragment03,null); return view; }}
//设置按钮点击变色
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true" android:drawable="@android:color/holo_blue_bright"/></selector>
//主页面布局
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.dongshaohua20170920.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="9" android:id="@+id/layout_pager" ></android.support.v4.view.ViewPager> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/radiogroup" android:layout_weight="1" android:orientation="horizontal"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:gravity="center" android:background="@drawable/selector" android:text="首页" android:checked="true" android:textSize="20sp" android:id="@+id/shouye"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:background="@drawable/selector" android:button="@null" android:text="西瓜视频" android:textSize="20sp" android:id="@+id/video"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/selector" android:layout_weight="1" android:gravity="center" android:button="@null" android:text="微头条" android:textSize="20sp" android:id="@+id/top"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/selector" android:layout_weight="1" android:gravity="center" android:button="@null" android:text="小视频" android:textSize="20sp" android:id="@+id/xiaoshipin"/> </RadioGroup> </LinearLayout> <ListView android:id="@+id/draw" android:layout_width="240sp" android:layout_height="fill_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:entries="@array/str" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#ffffff"/></android.support.v4.widget.DrawerLayout>
//fragment1布局
<?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"> <me.maxwin.view.XListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/list"></me.maxwin.view.XListView></LinearLayout>
//fragment页面布局2
<?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.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/tablayout"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="60dp" android:id="@+id/frag_viewpager"></android.support.v4.view.ViewPager></LinearLayout>
//头部viewpage
<?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.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/viewpager"></android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center" android:id="@+id/linear"></LinearLayout></LinearLayout>
//xlv布局
<?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"> <ImageView android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/img"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_marginTop="30dp" android:textSize="20sp" android:id="@+id/ctime"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_marginTop="60dp" android:id="@+id/msg"/></RelativeLayout>