您的位置:首页 > 移动开发 > Android开发

Android 常用布局视图

2015-12-04 17:54 726 查看
常用包 http://square.github.io/ EventBus
Scroller 滚动
拖拽

# android.support.design.widget.CollapsingToolbarLayout 收缩顶部TAB(名片)
# android.support.design.widget.NavigationView 左边通栏弹出
# android.support.design.widget.TextInputLayout 带提示输入布局
# android.support.design.widget.TabLayout 顶部tab
# android.support.v4.widget.NestedScrollView 带缓动的滚动
# android.support.v7.widget.CardView 卡片视图

compile 'de.hdodenhof:circleimageview:1.3.0' 圆角图片
compile 'com.loopj.android:android-async-http:1.4.7' 实现类似JQ AJAX
compile 'com.nineoldandroids:library:2.4.0' 动画库

AccessibilityDelegateCompat 无障碍使用

ActionBar
//设置顶部背景
actionBar.setBackgroundDrawable(getDrawable(R.drawable.aa));
//添加自定义视图
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(R.layout.nemu1);
//显示返回首页ICON
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeActionContentDescription("ccccccccccc");
actionBar.setHomeAsUpIndicator(R.drawable.c);

actionBar.setIcon(R.drawable.c);
actionBar.setLogo(R.drawable.aa);
//显示ICON 或LOGO
actionBar.setDisplayShowHomeEnabled(true);
//为真现实LOGO 假显示 ICON
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setTitle("ccccccccc");
actionBar.setSubtitle("subcccccccccc");
//是否显示标题
actionBar.setDisplayShowTitleEnabled(true);
//设置按钮
actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP);

Toolbar 跟ActionBar 类似
XML:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
android:background="?attr/colorPrimary" />
JAVA:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.aa);
toolbar.setLogo(R.drawable.c);

# ScrollView 滚动视图
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="10000dp"
android:height="10000dp"
/>
</HorizontalScrollView>
</ScrollView>

# TabHost
1. 静态
主XML:
<TabHost
android:id="@+id/tabhost"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="林炳东" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
TAB XML: xxx.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/xxx">
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="center_horizontal" />
</LinearLayout>
JAVA:
TabHost th=(TabHost)findViewById(R.id.tabhost);
th.setup();
LayoutInflater i= LayoutInflater.from(this);
i.inflate(R.layout.xxx, th.getTabContentView());
th.addTab(th.newTabSpec("tab1")
.setIndicator("标签1", null)
.setContent(R.id.tab1));
th.addTab(th.newTabSpec("tab2")
.setIndicator("标签2", null)
.setContent(R.id.xxx));
动态内容:
TabHost th=(TabHost)findViewById(R.id.tabHost);
th.setup();
TabHost.TabSpec tabSpec = th.newTabSpec("tab1")
.setIndicator("标签1", null)
.setContent(new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
TextView text = new TextView(tabactivity.this);
text.setText("text1");
return text;
}
});
th.addTab(tabSpec);
tabSpec = th.newTabSpec("tab2")
.setIndicator("标签2", null)
.setContent(new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
TextView text = new TextView(tabactivity.this);
text.setText("text2");
return text;
}
});
th.addTab(tabSpec);

# ViewStub 延时加载视图
<ViewStub
android:id="@+id/rload"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/xxx"
/>

ViewStub vs = (ViewStub) findViewById(R.id.rload);
vs.inflate();

# ImageSwitcher [类似 ViewSwitcher TextSwitcher]
XML:
<ImageSwitcher
android:id="@+id/imageSwitcher"
android:layout_marginTop="5dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"   >
</ImageSwitcher>
<Button
android:id="@+id/change"
android:text="change"
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></Button>
JAVA:
private Integer[] mImageIds = { R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4};
private  int i=0;
private float offp=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);

final ImageSwitcher img = (ImageSwitcher) findViewById(R.id.imageSwitcher);
//显示VIEW
img.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
ImageView i = new ImageView(tabactivity.this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return i;
}
});
img.setImageDrawable(getDrawable(mImageIds[2]));
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//getRawX()和getRawY()获得的是相对屏幕的位置
//getX()和getY()获得的永远是相对view的触摸位置坐标
//返回 false 将不会触发其他事件
Log.i("MontionEvent",String.valueOf(event.getAction()));
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
offp = event.getX();
break;
case MotionEvent.ACTION_MOVE:
//   img.setLeft(-(int)(offp - event.getX()));
break;
case MotionEvent.ACTION_UP:
if (offp - event.getX() > 10) {
i--;
img.setInAnimation(AnimationUtils
.loadAnimation(tabactivity.this,
R.anim.slide_in_right));
img.setOutAnimation(AnimationUtils
.loadAnimation(tabactivity.this,
R.anim.slide_out_left));
} else if (offp - event.getX() < 10) {
i++;
img.setInAnimation(AnimationUtils.loadAnimation(tabactivity.this,
android.R.anim.slide_in_left));
img.setOutAnimation(AnimationUtils.loadAnimation(tabactivity.this,
android.R.anim.slide_out_right));
}else
return true;
if (i < 0) i = mImageIds.length;
img.setImageDrawable(getDrawable(mImageIds[i % mImageIds.length]));
break;
}

return true;
}
});
Button but = (Button) findViewById(R.id.change);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i++;
img.setInAnimation(AnimationUtils.loadAnimation(tabactivity.this,
android.R.anim.slide_in_left));
img.setOutAnimation(AnimationUtils.loadAnimation(tabactivity.this,
android.R.anim.slide_out_right));
img.setImageDrawable(getDrawable(mImageIds[i % mImageIds.length]));
}
});
}

# ViewFlipper 带自动播放的 ViewSwitcher
XML :
<ViewFlipper
android:layout_width="match_parent"
android:layout_height="100dp"
android:id="@+id/filp">
<!-- 第一个页面 -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/a1" />
</LinearLayout>
<!-- 第二个页面 -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/a2"
android:gravity="center" />
</LinearLayout>
<!-- 第三个页面 -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center">

<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/a3"
android:gravity="center" />
</LinearLayout>
<!-- 第四个页面 -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/a4"
android:gravity="center" />
</LinearLayout>
</ViewFlipper>
<Button
android:id="@+id/fc"
android:text="change"
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></Button>
JAVA:
final ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.filp);
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(tabactivity.this,
android.R.anim.slide_in_left));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(tabactivity.this,
android.R.anim.slide_out_right));
Button fc = (Button) findViewById(R.id.fc);
fc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(viewFlipper.isFlipping())
viewFlipper.stopFlipping();
else
viewFlipper.startFlipping();
}
});
viewFlipper.startFlipping();

#AndroidImageSlider 幻灯片 https://github.com/daimajia/AndroidImageSlider compile 'com.squareup.picasso:picasso:2.3.2'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.slider:library:1.1.5@aar'

# ViewPager 左右滚动页面
XML:
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="1000dp"
android:id="@+id/viewpager">
<!-- PagerTabStrip 标题底部线 -->
<android.support.v4.view.PagerTabStrip
android:id="@+id/tabstrip"
android:layout_width="wrap_content"
android:layout_height="50dip"
android:gravity="center" />
</android.support.v4.view.ViewPager>
JAVA:
ViewPager pager = null;
PagerTabStrip tabStrip = null;
ArrayList<View> viewContainter = new ArrayList<View>();
ArrayList<String> titleContainer = new ArrayList<String>();
public String TAG = "tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
pager = (ViewPager) this.findViewById(R.id.viewpager);
tabStrip = (PagerTabStrip) this.findViewById(R.id.tabstrip);
//取消tab下面的长横线
//tabStrip.setDrawFullUnderline(false);
//设置当前tab页签的下划线颜色
tabStrip.setTabIndicatorColor(this.getResources().getColor(android.R.color.holo_blue_bright));
tabStrip.setTextSpacing(200);

View view1 = LayoutInflater.from(this).inflate(R.layout.xxx, null);
View view2 = LayoutInflater.from(this).inflate(R.layout.xxx, null);

//viewpager开始添加view
viewContainter.add(view1);
viewContainter.add(view2);

//页签项
titleContainer.add("网易新闻");
titleContainer.add("网易体育");

pager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return viewContainter.size();
}

@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
((ViewPager) container).removeView(viewContainter.get(position));
}

//每次滑动的时候生成的组件
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager) container).addView(viewContainter.get(position));
return viewContainter.get(position);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}

@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}

@Override
public CharSequence getPageTitle(int position) {
return titleContainer.get(position);
}
});
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {

}
});

}
配合 Fragment 使用
XML:
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="1000dp"
android:id="@+id/viewPager">
<android.support.v4.view.PagerTabStrip
android:id="@+id/tabstrip"
android:layout_width="wrap_content"
android:layout_height="50dip"
android:gravity="center" />
</android.support.v4.view.ViewPager>
JAVA:
List<Fragment> fragmentList = new ArrayList<Fragment>();
List<String>   titleList    = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
ViewPager vp = (ViewPager)findViewById(R.id.viewPager);
fragmentList.add(new ViewPagerFragment1("页面1"));
fragmentList.add(new ViewPagerFragment1("页面2"));
fragmentList.add(new ViewPagerFragment1("页面3"));
titleList.add("title 1 ");
titleList.add("title 2 ");
titleList.add("title 3 ");
vp.setAdapter(new myPagerAdapter(getSupportFragmentManager(), fragmentList, titleList));
}
class myPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
private List<String>   titleList;
public myPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList){
super(fm);
this.fragmentList = fragmentList;
this.titleList = titleList;
}
@Override
public Fragment getItem(int arg0) {
return (fragmentList == null || fragmentList.size() == 0) ? null : fragmentList.get(arg0);
}
@Override
public CharSequence getPageTitle(int position) {
return (titleList.size() > position) ? titleList.get(position) : "";
}
@Override
public int getCount() {
return fragmentList == null ? 0 : fragmentList.size();
}
}
public class ViewPagerFragment1 extends Fragment {
public ViewPagerFragment1(String text){
super();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.xxx, container, false);
return v;
}
}

# SwipeRefreshLayout 下拉刷新
ITEM XML:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/img"
android:layout_width="100dp"
android:layout_height="wrap_content"
fresco:placeholderImage="@drawable/aa"
fresco:viewAspectRatio="2"
fresco:roundedCornerRadius="10dp"
/>
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
XML
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--不用ScrollView 会导致加载图标被覆盖-->
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="10dp"
android:text="zzzzzzzzz"
android:textSize="20sp"
android:textStyle="bold" />
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
<TextView
android:visibility="gone"
android:id="@+id/empty_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="No items."
android:gravity="center"/>
JAVA:
final SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_container);
//设置刷新时动画的颜色,可以设置4个
swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.i("SwipeRefreshLayout","REFRESH");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.i("SwipeRefreshLayout", "REFRESH OK");
swipeRefreshLayout.setRefreshing(false);
}
}, 6000);
}
});
swipeRefreshLayout.setEmptyView(findViewById(R.id.empty_list));

带上拉加载的 SwipeRefreshLayout
compile 'com.demievil.library:refreshlayout:1.0.0@aar'

XML:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.demievil.library.RefreshLayout
android:id="@+id/my"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/item" />
</com.demievil.library.RefreshLayout>
<TextView
android:visibility="gone"
android:id="@+id/empty_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="No items."
android:gravity="center"
android:textColor="@color/colorPrimary"/>
</RelativeLayout>
JAVA:
public class MainActivity extends AppCompatActivity {
RefreshLayout mRefreshLayout;
ListView mListView;
View footerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRefreshLayout = (RefreshLayout) findViewById(R.id.my);
mListView = (ListView) findViewById(R.id.list);
footerLayout = getLayoutInflater().inflate(R.layout.listview_footer, null);
mListView.setEmptyView(findViewById(R.id.empty_list));
mListView.addFooterView(footerLayout);
mRefreshLayout.setChildView(mListView);
final ArrayAdapter apt= new myapt(this,R.layout.item);;
mListView.setAdapter(apt);
final LoaderManager.LoaderCallbacks loadercallback = new LoaderManager.LoaderCallbacks<List<Map<String,String>>>(){
@Override
public Loader<List<Map<String,String>>> onCreateLoader(int id, Bundle args) {
return new myloader(MainActivity.this,args);
}
@Override
public void onLoadFinished(Loader<List<Map<String,String>>> loader, List<Map<String,String>> data) {
apt.addAll(data);
mRefreshLayout.setRefreshing(false);
mRefreshLayout.setLoading(false);
}
@Override
public void onLoaderReset(Loader<List<Map<String,String>>> loader) {
apt.clear();
}
};
mRefreshLayout.setOnRefreshListener(new RefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// start to refresh
getLoaderManager().destroyLoader(1);
Bundle b = new Bundle();
b.putString("page","1");
getLoaderManager().initLoader(1, b, loadercallback);
}
});
mRefreshLayout.setOnLoadListener(new RefreshLayout.OnLoadListener() {
@Override
public void onLoad() {
Bundle b = new Bundle();
b.putString("page","2");
getLoaderManager().restartLoader(1,b,loadercallback);
}
});
Bundle b = new Bundle();
b.putString("page","1");
getLoaderManager().initLoader(1, b,loadercallback);
}
static class  myloader extends AsyncTaskLoader<List<Map<String,String>>> {
Bundle args;
public myloader(Context context, Bundle args) {
super(context);
this.args=args;
}
Call call = null;
@Override
public List<Map<String,String>> loadInBackground() {
List<Map<String,String>> my= new ArrayList<Map<String,String>>();

OkHttpClient client= new OkHttpClient();

String url="http://wifiad-api.urltest.tk/index/test";

Request request = new Request.Builder().url(url).build();
Response response = null;
String c = null;
try {
call=client.newCall(request);
response = call.execute();
c = response.body().string();
} catch (Exception e) {
e.printStackTrace();
return my;
}
if(!response.isSuccessful()){
return my;
}
JSONTokener jsontoken= new JSONTokener(c);
JSONObject jsonobject = null;
JSONArray jsonarr;
try {
jsonobject = (JSONObject) jsontoken.nextValue();
jsonarr =jsonobject.getJSONArray("data");
for (int i=0;i<jsonarr.length();i++){
JSONObject t=(JSONObject)jsonarr.get(i);
Map<String,String> m1= new HashMap<String,String>();
m1.put("txt",t.getString("tit").toString());
m1.put("pic",t.getString("src").toString());
my.add(m1);
}
} catch (JSONException e) {
e.printStackTrace();
return my;
}
return my;
}
@Override
public void cancelLoadInBackground() {
call.cancel();
}
@Override
protected void onStartLoading() {
forceLoad();
}
@Override
protected void onStopLoading() {
cancelLoad();
}
@Override
protected void onReset() {
super.onReset();
onStopLoading();
}
}
class myapt extends ArrayAdapter<Map<String,String>>{
int resource;
public myapt(Context context, int resource) {
super(context, resource);
this.resource=resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
LayoutInflater inflater = getLayoutInflater();
if (convertView == null) {
view = inflater.inflate(resource, parent, false);
} else {
view = convertView;
}
Map<String,String> data = getItem(position);

String c =data.get("pic");

if(c!=null) {
Uri uri = Uri.parse(c);
SimpleDraweeView draweeView = (SimpleDraweeView) view.findViewById(R.id.img);
draweeView.setImageURI(uri);
}
TextView viewById = (TextView) view.findViewById(R.id.txt);
viewById.setText(data.get("txt"));
return view;
}
}
}

数据绑定:
ITEM XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<data class=".Userlist">
<import type="android.view.View" />
<import type="com.example.mode.User" alias="User" />
<variable name="handlers" type="com.example.work.dome1.Main2Activity"/>
<variable name="user" type="User"/>
<import type="android.databinding.ObservableMap"/>
<variable name="prs" type="ObservableMap<String, Object>"/>
</data>
<LinearLayout
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="50dp"
android:layout_height="100dp"
android:text='@{prs["index"], default="5"}'
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:id="@+id/index"
/>
<com.facebook.drawee.view.SimpleDraweeView
app:imageUrl="@{user.src}"
android:id="@+id/img"
android:layout_width="100dp"
android:layout_height="wrap_content"
fresco:placeholderImage="@drawable/aa"
fresco:viewAspectRatio="2"
fresco:roundedCornerRadius="10dp"
/>
<TextView
android:onClick="@{handlers.onClickFriend}"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:id="@+id/t1"
android:text="@{user.tit}"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
/>
</LinearLayout>
</layout>
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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.work.dome1.Main2Activity">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main2"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<TextView
android:visibility="gone"
android:id="@+id/empty_list"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="No items."
android:gravity="center"
android:textColor="@color/colorPrimary"/>
</RelativeLayout>
USER JAVA:
public class User extends BaseObservable {
private String tit;
private String src;
@Bindable
public String getTit() {
return tit;
}
public void setTit(String tit){
this.tit=tit;
notifyPropertyChanged(BR.tit);
}
@Bindable
public String getSrc(){
return src;
}
public void setSrc(String src){
this.src=src;
notifyPropertyChanged(BR.src);
}
@BindingAdapter({"bind:imageUrl"})
public static void loadImage(SimpleDraweeView view, String url) {
Uri uri = Uri.parse(url);
view.setImageURI(uri);
}
}
JAVA:
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ListView mlv = (ListView) findViewById(R.id.main2);
mlv.setEmptyView(findViewById(R.id.empty_list));
myapt myapt = new myapt(this, R.layout.main2);
mlv.setAdapter(myapt);
ProgressDialog dialog = new ProgressDialog(this);
myasync myasync = new myasync(myapt, dialog);
myasync.execute("page=1");
}

public void onClickFriend(View view) {
Log.i("xxx","bbb");
}

class myasync extends AsyncTask<String,Integer,ArrayList<User>>{
ProgressDialog dialog=null;
ArrayAdapter<User> apt;
public myasync(ArrayAdapter<User> apt,ProgressDialog dialog){
this.dialog=dialog;
this.apt=apt;
}
@Override
protected ArrayList<User> doInBackground(String... params) {
ArrayList<User> my= new ArrayList<User>();
OkHttpClient client= new OkHttpClient();
String url="http://wifiad-api.urltest.tk/index/test";
Request request = new Request.Builder().url(url).build();
Response response = null;
String c = null;
try {
Call call=client.newCall(request);
response = call.execute();
c = response.body().string();
} catch (Exception e) {
e.printStackTrace();
return my;
}
if(!response.isSuccessful()){
return my;
}
JSONTokener jsontoken= new JSONTokener(c);
JSONObject jsonobject = null;
JSONArray jsonarr;
try {
jsonobject = (JSONObject) jsontoken.nextValue();
jsonarr =jsonobject.getJSONArray("data");
for (int i=0;i<jsonarr.length();i++){
JSONObject t=(JSONObject)jsonarr.get(i);
User u= new User();
u.setTit(t.getString("tit").toString());
u.setSrc(t.getString("src").toString());
my.add(u);
}
} catch (JSONException e) {
e.printStackTrace();
return my;
}
return my;
}
@Override
protected void onPreExecute() {
if(dialog!=null) {
dialog.setMessage("加载中");
dialog.show();
}
super.onPreExecute();
}
@Override
protected void onPostExecute(ArrayList<User> s) {
if(dialog!=null)
dialog.hide();
super.onPostExecute(s);
apt.addAll(s);
}
}
class myapt extends ArrayAdapter<User>{
int resource;
public myapt(Context context, int resource) {
super(context, resource);
this.resource=resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
LayoutInflater inflater = getLayoutInflater();
com.example.work.dome1.Userlist binding;
binding= DataBindingUtil.inflate(inflater,resource,parent,false);
ObservableArrayMap<String, Object> prs = new ObservableArrayMap<>();
binding.setPrs(prs);
User data = getItem(position);
binding.setUser(data);
return binding.getRoot();
}
}
}

RecyclerView 列表
compile 'com.android.support:recyclerview-v7:23.1.1'
ITEM XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="80dp"
android:text="New Text"
android:id="@+id/tt1"
android:gravity="center"
/>
</LinearLayout>
MENU XML:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add"
android:orderInCategory="100"
app:showAsAction="never"
android:title="添加"
/>
<item
android:id="@+id/del"
android:orderInCategory="100"
app:showAsAction="ifRoom"
android:title="删除"
/>
</menu>
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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.work.dome1.Main3Activity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view_test_rv"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
JAVA:
public class Main3Activity extends AppCompatActivity {
PersonAdapter mylist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view_test_rv);
//设置动画
recyclerView.setItemAnimator(new DefaultItemAnimator());
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置布局
recyclerView.setLayoutManager(layoutManager);
ArrayList<String> list = new ArrayList<>();
for (int i=0;i<100;i++){
list.add("itemsss"+String.valueOf(i));
}
mylist = new PersonAdapter(list);
recyclerView.setAdapter(mylist);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
mylist.add(1,"new text");
break;
case R.id.del:
mylist.del(0);
break;
}
return super.onOptionsItemSelected(item);
}
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> {
private List<String> list;
public PersonAdapter(List<String> list) {
this.list = list;
}
public void add(int position,String listitem) {
list.add(position, listitem);
notifyItemInserted(position);
}
public void del(int position) {
list.remove(position);
notifyItemRemoved(position);
}
@Override
public PersonAdapter.PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View view = getLayoutInflater().inflate(R.layout.citem, parent, false);
return new PersonViewHolder(view);
}
@Override
public void onBindViewHolder(PersonAdapter.PersonViewHolder viewHolder, int i) {
//把数据绑定到视图
PersonViewHolder holder = viewHolder;
String person = list.get(i);
holder.set_txt(person);
}
@Override
public int getItemCount() {
return list.size();
}
class PersonViewHolder extends RecyclerView.ViewHolder
{
public PersonViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("xxx", "xxx");
}
});
}
public void set_txt(String a){
TextView t1 = (TextView) itemView.findViewById(R.id.tt1);
t1.setText(a);
}
}
}
}

基于 RecyclerView 的上下拉
compile 'com.github.tosslife:pullloadview:1.1.0'

SlidingPaneLayout 左右面板 [右边移动]
XML:
<android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/slidingpanellayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<fragment
android:id="@+id/leftfragment"
android:name="com.example.dome2.tabactivity$BookMarkerFragment"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_gravity="left" />
<fragment
android:id="@+id/rightfragment"
android:name="com.example.dome2.tabactivity$BookMarkerFragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right"
android:layout_weight="1" />
</android.support.v4.widget.SlidingPaneLayout>
JAVA:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);

SlidingPaneLayout spl = (SlidingPaneLayout) this.findViewById(R.id.slidingpanellayout);
spl.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
@Override
public void onPanelClosed(View view) {
//面板打开
}
@Override
public void onPanelOpened(View viw) {
//面板关闭
}
@Override
public void onPanelSlide(View arg0, float arg1) {

}
});
}
public static class BookMarkerFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.xxx, container, false);
return view;
}
}
public static class BookMarkerFragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.xxx, container, false);
return view;
}
}

DrawerLayout 左右面板 [右边固定]
XML:
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<!-- The main content view -->

<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="open"
/>
</FrameLayout>

<!-- The navigation drawer -->

<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
JAVA:
final DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Button button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 按钮按下,将抽屉打开
mDrawerLayout.openDrawer(Gravity.LEFT);

}
});

FrameLayout 层叠显示

LinearLayout 线性排列

TableLayout TableRow 表格排列

GridLayout 格子

RelativeLayout 相对排列 只针对下级(一级)子元素有效
//相对同级视图 (值:视图ID)
layout_below 放到指定视图下面
layout_above 放到指定视图上面
layout_toLeftOf 放到指定视图左边
layout_toRightOf 放到指定视图右边
layout_alignTop	顶边与指定视图顶边对齐
layout_alignBottom 低边与指定视图低边对齐
layout_alignLeft 左边与指定视图左边对齐
layout_alignRight 右边与指定视图右边对齐
layout_alignBaseline 与指定视图基准线对齐 (如保持文字在同行)

//相对父视图 (值:true false)
layout_alignParentTop  顶边与其父视图的顶边对齐
layout_alignParentBottom 底边与其父视图的底边对齐
layout_alignParentLeft  左边与其父视图的左边对齐
layout_alignParentRight  右边与其父视图的右边对齐
layout_centerHorizontal  在父视图中水平居中
layout_centerVertical 在父视图中垂直居中
layout_centerInParent  在父视图中的中央

LinearLayoutCompat 线性布局 每个组件间加 divider
XML:
<android.support.v7.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dip"
android:orientation="vertical"
app:divider="@drawable/line"
app:dividerPadding="5dp"
app:showDividers="beginning|middle|end" >

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="CSDN Zhang Phil" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="CSDN Zhang Phil" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="CSDN Zhang Phil" />
</android.support.v7.widget.LinearLayoutCompat>


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: