1.BaseActivity
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉ActionBar的方法
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(bindLayout());
initView();
initData();
bindEvent();
}
public abstract int bindLayout();
public abstract void initView();
public abstract void initData();
public abstract void bindEvent();
}
2.MainActivity
public class MainActivity extends BaseActivity {
private TextView te;
private SharedPreferences sp;
@Override
public int bindLayout() {
return R.layout.activity_main;
}
@Override
public void initView() {
te = findViewById(R.id.te);
//获取sp 第一个是文件名 第二个参数是文件访问权限
sp = getSharedPreferences("login", Context.MODE_PRIVATE);
}
@Override
public void initData() {
//判断是否自动登录
if(sp.getBoolean("自动登录",false)){
startActivity(new Intent(MainActivity.this,SecondActivity.class));
finish();
//移除
handler.removeCallbacksAndMessages(null);
return ;
}
}
@Override
public void bindEvent() {
te.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("自动登录",true);
edit.commit();
startActivity(new Intent(MainActivity.this,SecondActivity.class));
finish();
//移除
handler.removeCallbacksAndMessages(null);
}
});
//发送消息
handler.sendEmptyMessageDelayed(0,1000);
}
//销毁
@Override
protected void onDestroy() {
super.onDestroy();
//移除
handler.removeCallbacksAndMessages(null);
}
int time=5;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
time--;
if(time>0){
te.setText(time+"");
handler.sendEmptyMessageDelayed(0,1000);
}else{
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("自动登录",true);
edit.commit();
startActivity(new Intent(MainActivity.this,SecondActivity.class));
finish();
}
break;
}
}
};
}
3.SecondActivity
public class SecondActivity extends BaseActivity {
private RadioGroup radi;
private Frag_Fen f2;
private Frag_Shou f1;
private Frag_Wd f3;
private XListView listView;
private String str="http://www.xieast.com/api/news/news.php?page=2";
private String str1="http://www.xieast.com/api/news/news.php?page=3";
private ArrayList<CeDatas> data;
private CeAdapter adapter;
private ImageView img;
private DrawerLayout draw;
private Dao dao;
@Override
public int bindLayout() {
return R.layout.second_main;
}
@Override
public void initView() {
radi = findViewById(R.id.radi);
radi.check(radi.getChildAt(0).getId());
listView = findViewById(R.id.xlist);
img = findViewById(R.id.ceimg);
draw = findViewById(R.id.draw);
dao = new Dao(SecondActivity.this);
}
@Override
public void initData() {
String ss="http://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr=detail&url=http%3A%2F%2Fimg5.duitang.com%2Fuploads%2Fitem%2F201410%2F05%2F20141005082835_2RTzn.thumb.700_0.jpeg&thumburl=http%3A%2F%2Fimg2.imgtn.bdimg.com%2Fit%2Fu%3D3846895839%2C2711067435%26fm%3D26%26gp%3D0.jpg";
//侧拉的 个人头像设置
ImageLoader.getInstance().displayImage(ss, img);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
f2 = new Frag_Fen();
f1 = new Frag_Shou();
f3 = new Frag_Wd();
transaction.add(R.id.frag,f1);
transaction.add(R.id.frag,f2);
transaction.add(R.id.frag,f3);
transaction.hide(f2).hide(f3).show(f1);
transaction.commit();
//侧拉里面的数据
//启用
listView.setPullLoadEnable(true);
if(Http.isWork(SecondActivity.this)){
Http.HttpAsyTask(str, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
//第一次加载数据 判断数据库有没有数据 有就添加 没有不添加
if(dao.query("news",null,null,null,null,null,null).moveToFirst()){
}else{
//没有就添加
for (CeDatas da:data) {
ContentValues contentValues=new ContentValues();
contentValues.put("tit",da.getTitle());
contentValues.put("name",da.getAuthor_name());
contentValues.put("img",da.getThumbnail_pic_s());
dao.insert("news",null, contentValues);
}
}
adapter=new CeAdapter(SecondActivity.this,data);
listView.setAdapter(adapter);
}
});
}else{
//没网的状态下 查询数据库
Cursor cursor = dao.query("news", null, null, null, null, null, null);
data=new ArrayList<>();
if(cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String tit = cursor.getString(cursor.getColumnIndex("tit"));
String img = cursor.getString(cursor.getColumnIndex("img"));
data.add(new CeDatas(name, img,tit));
}while (cursor.moveToNext());
}
cursor.close();
Toast.makeText(SecondActivity.this,"没有网络",Toast.LENGTH_LONG).show();
adapter=new CeAdapter(SecondActivity.this,data);
listView.setAdapter(adapter);
}
}
@Override
public void bindEvent() {
draw.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View view, float v) {
}
@Override
public void onDrawerOpened(@NonNull View view) {
Toast.makeText(SecondActivity.this,"侧拉打开",Toast.LENGTH_LONG).show();
}
@Override
public void onDrawerClosed(@NonNull View view) {
Toast.makeText(SecondActivity.this,"侧拉关闭",Toast.LENGTH_LONG).show();
}
@Override
public void onDrawerStateChanged(int i) {
}
});
radi.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
switch (i){
case R.id.radi1:
transaction.hide(f2).hide(f3).show(f1);
break;
case R.id.radi2:
transaction.hide(f1).hide(f3).show(f2);
break;
case R.id.radi3:
transaction.hide(f2).hide(f1).show(f3);
break;
}
transaction.commit();
}
});
listView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {//下拉
if(Http.isWork(SecondActivity.this)){
Http.HttpAsyTask(str, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
adapter=new CeAdapter(SecondActivity.this,data);
listView.setAdapter(adapter);
onLoad();
}
});
}
}
@Override
public void onLoadMore() {//上拉加载
if(Http.isWork(SecondActivity.this)){
Http.HttpAsyTask(str1, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean1=gson.fromJson(s,CeBean.class);
ArrayList<CeDatas> data1 = ceBean1.getData();
data.addAll(data1);
adapter.notifyDataSetChanged();
onLoad();
}
});
}
}
});
}
//一个方法
private void onLoad() {
//停止加载更多,重置头视图
listView.stopRefresh();
//停止加载更多,重置脚视图
listView.stopLoadMore();
//设置刷新时间
listView.setRefreshTime("刷新成功");
}
}
4.BaseFragment
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(bindLayout(),container,false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
initData();
bindEvent();
}
//绑定视图
protected abstract int bindLayout();
//绑定组件
protected abstract void initView();
//操作数据
protected abstract void initData();
//设置监听
protected abstract void bindEvent();
}
5.Http
public class Http {
//判断有没有网络状态
public static boolean isWork(Context con){
if(con!=null){
ConnectivityManager manager= (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info!=null){
return info.isAvailable();
}
}
return false;
}
public static void HttpAsyTask(String str, final CallTasks ca){
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... strings) {
return isquest(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
ca.getData(s);
}
}.execute(str);
}
public interface CallTasks{
void getData(String s);
}
public static String isquest(String strUrl){
try {
URL url=new URL(strUrl);
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if(code==200){
InputStream stream = connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(stream,"utf-8"));
StringBuilder builder=new StringBuilder();
String str="";
while ((str=reader.readLine())!=null){
builder.append(str);
}
return builder.toString();
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
6.Fragment第一个页面
public class Frag_Shou extends BaseFragment {
private TabLayout tab;
private ViewPager pager;
private ArrayList<ChannelItem> tabData=new ArrayList<>();
private ArrayList<Fragment> arr;
private TabPagerAdapter adapter;
private ImageView img;
@Override
protected int bindLayout() {
return R.layout.frag_shou;
}
@Override
protected void initView() {
tab = getActivity().findViewById(R.id.tab);
pager = getActivity().findViewById(R.id.pager);
img = getActivity().findViewById(R.id.tabimg);
}
@Override
protected void initData() {
//查询数据库
tabData = DBUtil.getTabData(getActivity());
//加载Fragment
arr = new ArrayList<>();
for (int i = 0; i <tabData.size() ; i++) {
ChannelItem channelItem = tabData.get(i);
String name = channelItem.getName();
if("头条".equals(name)){
arr.add(new Tab_Shou());
}else{
arr.add(new Tab_Null());
}
}
//设置适配器
adapter = new TabPagerAdapter(getActivity().getSupportFragmentManager(), tabData, arr);
pager.setAdapter(adapter);
//绑定 让viewpager和tabLayout关联
tab.setupWithViewPager(pager);
}
@Override
protected void bindEvent() {
//点击跳转频道管理
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//跳转Activity
Intent intent=new Intent(getActivity(), ChannelActivity.class);
//跳转回传
startActivityForResult(intent,0);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判断是不是我们的回传 回传值是0
if(resultCode==0){
//查询数据库中的数据 ,找到我们要展示的Tab标签
tabData = DBUtil.getTabData(getActivity());
//便利数据(对数据进行刷新操作)
for (int i = 0; i <tabData.size() ; i++) {
ChannelItem channelItem = tabData.get(i);
String name = channelItem.getName();
//把数据添加到tab中
tab.addTab(tab.newTab().setText(name));
//设置fragment(可以根据名字创建Fragment)
if("头条".equals(name)){
arr.add(new Tab_Shou());
}else{
arr.add(new Tab_Null());
}
//设置适配器
adapter = new TabPagerAdapter(getActivity().getSupportFragmentManager(), tabData, arr);
pager.setAdapter(adapter);
//绑定
tab.setupWithViewPager(pager);
}
}
}
}
7.TabNull
public class Tab_Shou extends BaseFragment {
private PullToRefreshListView listv;
private Dao dao;
private String str="http://www.xieast.com/api/news/news.php?page=5";
private String str1="http://www.xieast.com/api/news/news.php?page=6";
private String str2="http://www.xieast.com/api/news/news.php?page=7";
private ArrayList<CeDatas> data;
private CeAdapter adapter;
@Override
protected int bindLayout() {
return R.layout.tab_shou;
}
@Override
protected void initView() {
listv = getActivity().findViewById(R.id.pull);
//设置模式
listv.setMode(PullToRefreshBase.Mode.BOTH);
//刷新的时候可以滑动
listv.setScrollingWhileRefreshingEnabled(true);
dao = new Dao(getActivity());
}
@Override
protected void initData() {
if(Http.isWork(getActivity())){
Http.HttpAsyTask(str, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
if(dao.query("shou",null,null,null,null,null,null).moveToFirst()){
}else{
for (CeDatas ca : data) {
ContentValues values=new ContentValues();
values.put("tit",ca.getTitle());
values.put("name",ca.getAuthor_name());
values.put("img",ca.getThumbnail_pic_s());
dao.insert("shou",null,values);
}
}
adapter = new CeAdapter(getActivity(), data);
listv.setAdapter(adapter);
}
});
}else{
//没有网络 请求数据库
Cursor cursor = dao.query("shou", null, null, null, null, null, null);
data=new ArrayList<>();
if(cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String tit = cursor.getString(cursor.getColumnIndex("tit"));
String img = cursor.getString(cursor.getColumnIndex("img"));
data.add(new CeDatas(name,img,tit));
}while (cursor.moveToNext());
}
cursor.close();
Toast.makeText(getActivity(),"没有网络",Toast.LENGTH_LONG).show();
adapter=new CeAdapter(getActivity(),data);
listv.setAdapter(adapter);
}
}
@Override
protected void bindEvent() {
listv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//下拉刷新
//判断有没有网
if(Http.isWork(getActivity())){
Http.HttpAsyTask(str1, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
adapter=new CeAdapter(getActivity(),data);
listv.setAdapter(adapter);
listv.onRefreshComplete();
}
});
}else{
Toast.makeText(getActivity(),"没有网络",Toast.LENGTH_LONG).show();
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//上拉加载
if(Http.isWork(getActivity())){
Http.HttpAsyTask(str2, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
ArrayList<CeDatas> data1 = ceBean.getData();
data.addAll(data1);
adapter.notifyDataSetChanged();
//当列表刷新时调用
listv.onRefreshComplete();
}
});
}else{
Toast.makeText(getActivity(),"没有网络",Toast.LENGTH_LONG).show();
}
}
});
}
}
8.Dao
public class Dao {
private final SQLiteDatabase db;
public Dao(Context con){
MySqlite mySqlite=new MySqlite(con);
db = mySqlite.getWritableDatabase();
}
public long insert(String table, String nullColumnHack, ContentValues values) {
return db.insert(table,nullColumnHack,values);
}
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
return db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
}
}
9.MySqlite
public class MySqlite extends SQLiteOpenHelper {
public MySqlite(Context context) {
super(context, "bw.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table news(id integer primary key autoincrement,name text,tit text,img text)");
sqLiteDatabase.execSQL("create table shou(id integer primary key autoincrement,name text,tit text,img text)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
10.App
public class App extends ChannelApplication {
@Override
public void onCreate() {
super.onCreate();
String path= Environment.getExternalStorageDirectory().getPath()+"/TuPian";
File file=new File(path);
DisplayImageOptions options=new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.zhan)
.showImageOnFail(R.mipmap.shibai)
.displayer(new CircleBitmapDisplayer())
.bitmapConfig(Bitmap.Config.ARGB_8888)
.build();
ImageLoaderConfiguration loaderConfiguration=new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(options)
.memoryCacheExtraOptions(200,200)
.memoryCacheSize(2 * 1024 * 1024)
.threadPoolSize(3)
.threadPriority(1000)
.diskCache(new UnlimitedDiskCache(file))
.diskCacheFileCount(50)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 *1024)
.build();
ImageLoader imageLoader=ImageLoader.getInstance();
imageLoader.init(loaderConfiguration);
}
}
11.CeAdapter
public class CeAdapter extends BaseAdapter {
private Context con;
private ArrayList<CeDatas> arr;
public CeAdapter(Context con, ArrayList<CeDatas> arr) {
this.con = con;
this.arr = arr;
}
@Override
public int getCount() {
return arr.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
switch (getItemViewType(i)){
case 0:
ViewHolder0 vh;
if(view==null){
view=LayoutInflater.from(con).inflate(R.layout.ce_one,null);
vh=new ViewHolder0();
vh.img=view.findViewById(R.id.img);
vh.tit=view.findViewById(R.id.tit);
view.setTag(vh);
}else{
vh= (ViewHolder0) view.getTag();
}
vh.tit.setText(arr.get(i).getTitle());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh.img);
break;
case 1:
ViewHolder1 vh1;
if(view==null){
view= LayoutInflater.from(con).inflate(R.layout.ce_two,null);
vh1=new ViewHolder1();
vh1.img=view.findViewById(R.id.img);
vh1.tit=view.findViewById(R.id.tit);
view.setTag(vh1);
}else{
vh1= (ViewHolder1) view.getTag();
}
vh1.tit.setText(arr.get(i).getTitle());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh1.img);
break;
}
return view;
}
static class ViewHolder0{
ImageView img;
TextView tit;
}
static class ViewHolder1{
ImageView img;
TextView tit;
}
}
12.TabPagerAdapter
public class TabPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> arr;
private ArrayList<ChannelItem> tabData;
public TabPagerAdapter(FragmentManager fm, ArrayList<ChannelItem> tabData,ArrayList<Fragment> arr) {
super(fm);
this.arr=arr;
this.tabData=tabData;
}
@Override
public Fragment getItem(int i) {
return arr.get(i);
}
@Override
public int getCount() {
return tabData.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabData.get(position).getName();
}
}
13.CeDatas
public class CeDatas {
private String author_name;
private String thumbnail_pic_s;
private String title;
public CeDatas(String author_name, String thumbnail_pic_s, String title) {
this.author_name = author_name;
this.thumbnail_pic_s = thumbnail_pic_s;
this.title = title;
}
@Override
public String toString() {
return "CeDatas{" +
"author_name='" + author_name + '\'' +
", thumbnail_pic_s='" + thumbnail_pic_s + '\'' +
", title='" + title + '\'' +
'}';
}
public String getAuthor_name() {
return author_name;
}
public void setAuthor_name(String author_name) {
this.author_name = author_name;
}
public String getThumbnail_pic_s() {
return thumbnail_pic_s;
}
public void setThumbnail_pic_s(String thumbnail_pic_s) {
this.thumbnail_pic_s = thumbnail_pic_s;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
14.CeBean
public class CeBean {
private ArrayList<CeDatas> data;
private String code;
private String msg;
@Override
public String toString() {
return "CeBean{" +
"data=" + data +
", code='" + code + '\'' +
", msg='" + msg + '\'' +
'}';
}
public ArrayList<CeDatas> getData() {
return data;
}
public void setData(ArrayList<CeDatas> data) {
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
1.
frag_shou
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<android.support.design.widget.TabLayout
android:id="@+id/tab"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#fff"
app:tabGravity="fill"
app:tabIndicatorColor="@color/color"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/color"
app:tabTextColor="#000"
/>
<ImageView
android:id="@+id/tabimg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="18dp"
android:src="@mipmap/menu"
/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
1.second_main
<android.support.v4.widget.DrawerLayout
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></FrameLayout>
<RadioGroup
android:id="@+id/radi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radi1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:background="@drawable/sele"
android:text="首页"
android:textSize="25sp" />
<RadioButton
android:id="@+id/radi2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:background="@drawable/sele"
android:gravity="center"
android:padding="8dp"
android:text="分类"
android:textSize="25sp" />
<RadioButton
android:id="@+id/radi3"
android:background="@drawable/sele"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:text="我的"
android:textSize="25sp" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:orientation="vertical"
android:background="#ccc"
>
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:id="@+id/ceimg"
/>
<com.qy.xlistview.XListView
android:id="@+id/xlist"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></com.qy.xlistview.XListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>