zoukankan      html  css  js  c++  java
  • Android 常用布局视图

    常用包
    	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>
    
    
     
    

      

  • 相关阅读:
    兼容性问题--HTML+CSS
    限时购--倒计时⏳
    如何把项目上传到GitHub上
    转载:java面试题(一)
    转载:php excel 的处理
    转载:Angular的filter总结
    转载:Think in AngularJS:对比jQuery和AngularJS的不同思维模式(大漠穷秋)
    转载:对比Angular/jQueryUI/Extjs:没有一个框架是万能的
    在eclipse中添加svn插件
    最近的一些事儿
  • 原文地址:https://www.cnblogs.com/liushannet/p/5020104.html
Copyright © 2011-2022 走看看