GVKun编程网logo

Android 自定义弹性ListView控件实例代码(三种方法)(android弹性布局)

1

最近很多小伙伴都在问Android自定义弹性ListView控件实例代码(三种方法)和android弹性布局这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展(PASS)JAVA数组

最近很多小伙伴都在问Android 自定义弹性ListView控件实例代码(三种方法)android弹性布局这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展(PASS)JAVA数组去重 三种方法 (不用集合)、android studio jar 包添加 的 三种方法、Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)、android获取屏幕宽高与获取控件宽高(三种方法)等相关知识,下面开始了哦!

本文目录一览:

Android 自定义弹性ListView控件实例代码(三种方法)(android弹性布局)

Android 自定义弹性ListView控件实例代码(三种方法)(android弹性布局)

关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考:

弹性ListView

第一种方法:

import android.content.Context;
import android.content.res.Configuration;
import android.util.AttributeSet;
import android.util.displayMetrics;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.ListView;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* Created by Noah on 2016/1/16.
*/
public class BounceListView extends ListView {
private static final float MAX_Y_OVERSCROLL_disTANCE = 200;
private float mMaxYOverscrolldistance;
public BounceListView(Context context) {
this(context,null);
}
public BounceListView(Context context,AttributeSet attrs) {
this(context,attrs,0);
}
public BounceListView(Context context,AttributeSet attrs,int defStyleAttr) {
super(context,defStyleAttr);
initBounceListView();
}
private void initBounceListView(){
final displayMetrics metrics = getContext().getResources().getdisplayMetrics();
final float density = metrics.density;
mMaxYOverscrolldistance = (int) (density * MAX_Y_OVERSCROLL_disTANCE);
}
@Override
protected boolean overScrollBy(int deltaX,int deltaY,int scrollX,int scrollY,int scrollRangeX,int scrollRangeY,int maxOverScrollX,int maxOverScrollY,boolean isTouchEvent) {
return super.overScrollBy(deltaX,deltaY,scrollX,scrollY,scrollRangeX,scrollRangeY,maxOverScrollX,(int)mMaxYOverscrolldistance,isTouchEvent);
}
/**
* 设置本App所有的ListView弹性粒度
* @param ctx
* @param size
* @return
*/
public boolean configGlobalMaxOverScrolldistance(Context ctx,int size)
{
try {
final displayMetrics metrics = ctx.getResources().getdisplayMetrics();
final float density = metrics.density;
int value = (int) (density * size);
mMaxYOverscrolldistance = value;
ViewConfiguration config = ViewConfiguration.get(ctx);
Field mOverscrolldistance = ViewConfiguration.class.getDeclaredField("mOverscrolldistance");
if(!mOverscrolldistance.isAccessible() || !Modifier.isPublic(mOverscrolldistance.getModifiers()))
{
mOverscrolldistance.setAccessible(true);
}
mOverscrolldistance.setInt(config,value);
} catch (Exception e) {
e.printstacktrace();
return false;
}
return true;
}
}

第二种比较简单,好容易理解,只是动态改变了ListView在Y轴上的可移动距离,代码如下:

import android.content.Context; 
import android.util.AttributeSet; 
import android.util.displayMetrics; 
import android.widget.ListView; 
/** 
* 弹性ListView。 
* @author E 
*/ 
public class FlexiListView extends ListView{ 
//初始可拉动Y轴方向距离 
private static final int MAX_Y_OVERSCROLL_disTANCE = 100; 
//上下文环境 
private Context mContext; 
//实际可上下拉动Y轴上的距离 
private int mMaxYOverscrolldistance; 
public FlexiListView(Context context){ 
super(context); 
mContext = context; 
initBounceListView(); 
} 
public FlexiListView(Context context,AttributeSet attrs) { 
super(context,attrs); 
mContext = context; 
initBounceListView(); 
} 
public FlexiListView(Context context,int defStyle) { 
super(context,defStyle); 
mContext = context; 
initBounceListView(); 
} 
private void initBounceListView(){ 
final displayMetrics metrics = mContext.getResources().getdisplayMetrics(); 
final float density = metrics.density; 
mMaxYOverscrolldistance = (int) (density * MAX_Y_OVERSCROLL_disTANCE); 
} 
@Override 
protected boolean overScrollBy(int deltaX,boolean isTouchEvent) { 
//实现的本质就是在这里动态改变了maxOverScrollY的值 
return super.overScrollBy(deltaX,mMaxYOverscrolldistance,isTouchEvent); 
} 
}

第三种方法,结合了手势来实现ListView的弹性效果,这里可以根据手势来进行更多的扩展,代码如下:

import android.content.Context; 
import android.graphics.Rect; 
import android.util.AttributeSet; 
import android.view.GestureDetector; 
import android.view.GestureDetector.OnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.animation.TranslateAnimation; 
import android.widget.ListView; 
/** 
* 具有弹性效果的ListView。主要是实现父类dispatchTouchEvent方法和OnGestureListener中onScroll方法。 
* @author E 
*/ 
public class FlexibleListView extends ListView implements OnGestureListener{ 
private Context context = null; 
private boolean outBound = false; 
private int distance; 
private int firstOut; 
public FlexibleListView(Context context,attrs); 
this.context = context; 
} 
public FlexibleListView(Context context,defStyle); 
this.context = context; 
} 
public FlexibleListView(Context context) { 
super(context); 
this.context = context; 
} 
GestureDetector lisGestureDetector = new GestureDetector(context,this); 
@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
int act = event.getAction(); 
if ((act == MotionEvent.ACTION_UP || act == MotionEvent.ACTION_CANCEL) 
&& outBound) { 
outBound = false; 
// scroll back 
} 
if (!lisGestureDetector.onTouchEvent(event)) { 
outBound = false; 
} else { 
outBound = true; 
} 
Rect rect = new Rect(); 
getLocalVisibleRect(rect); 
TranslateAnimation am = new TranslateAnimation( 0,-rect.top,0); 
am.setDuration(300); 
startAnimation(am); 
scrollTo(0,0); 
return super.dispatchTouchEvent(event); 
} 
@Override 
public boolean onDown(MotionEvent e) { 
return false; 
} 
@Override 
public void onShowPress(MotionEvent e) { 
} 
@Override 
public boolean onSingleTapUp(MotionEvent e) { 
return false; 
} 
@Override 
public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) { 
int firstPos = getFirstVisiblePosition(); 
int lastPos = getLastVisiblePosition(); 
int itemCount = getCount(); 
// outbound Top 
if (outBound && firstPos != 0 && lastPos != (itemCount - 1)) { 
scrollTo(0,0); 
return false; 
} 
View firstView = getChildAt(firstPos); 
if (!outBound) 
firstOut = (int) e2.getRawY(); 
if (firstView != null&& (outBound || (firstPos == 0 
&& firstView.getTop() == 0 && distanceY < 0))) { 
// Record the length of each slide 
distance = firstOut - (int) e2.getRawY(); 
scrollTo(0,distance / 2); 
return true; 
} 
// outbound Bottom 
return false; 
} 
@Override 
public void onLongPress(MotionEvent e) { 
} 
@Override 
public boolean onFling(MotionEvent e1,float veLocityX,float veLocityY) { 
return false; 
} 
}

以上给大家分享了几种比较常用的方法,编程小技巧小编整理出来的,希望对大家有所帮助。

(PASS)JAVA数组去重 三种方法 (不用集合)

(PASS)JAVA数组去重 三种方法 (不用集合)

第一种方法(只学到数组的看):

定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0,

package demo01;

import java.sql.Array;
import java.util.Arrays;
/*JAVA数组去重**/
public class ArrayQC {
    public static void main(String[] args) {
        // 获取一个无重复元素的数组
        int[] arr = new int[] { 11, 22, 22, 33, 44, 55, 44, 66, 66, 66 };
        // 先确定新数组的长度
        int[] newArr = new int[arr.length];

        int index = 0; // 新数组存储元素索引(或者说无重复的个数)

        outer: for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                         //当数据重复时,跳出外圈循环
                if (arr[i] == arr[j]) {
                    //System.out.println("arr[i]:"+arr[i]+"arr[j]:"+arr[j]);
                    continue outer;
                }
            }
            // 后面没有与当前元素重复的值,保存这个数
            //System.out.println("for内的index:"+index);
            newArr[index] = arr[i];
            index++;
        }
        // 新数组中存储着无重复的值和后面一些无效的0
        //System.out.println("index:"+index);
        int[] result = new int[index];
        for (int i = 0; i < index; i++) { // 遍历有效值个数
            result[i] = newArr[i];
        }
        System.out.println(Arrays.toString(result));
    }

}

第二中方法:

/* 第二种方法:
     * 
     * 一个一个删除,有一个删一个. 
     * 把数组中的一个数据和其他数据进行比较,如果有一个重复时,就直接开始创建新数组把重复的元素去除,并重新赋给旧数组
     */

public static void main(String[] args) {

    int[] arr = { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; // 1, 5, 3, 4, 8

    for (int i = 0; i < arr.length; i++) {

        for (int j = i + 1; j < arr.length; j++) {

            if (arr[i] == arr[j]) {
                //System.out.println("arr[i]:"+arr[i]+",arr[j]"+arr[j]);
                // return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系)
                arr = aa(arr, j);
                // 改变的数组中新数据顶替了覆盖数组的就数据,所以还要重新比较一次
                
                 // { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 下标 0 1 2
                 // 当下标为1被删除了 ,下标2的数据补上 0 2 这个新元素还没有被比较,所以要再比较一次,所以j--
                //System.out.println("j:"+j); 
                j--;
            }
        }
    }

    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }

}

// 需要获得旧数组和重复元素的下标,然后改成新数组并返回出来新数组
public static int[] aa(int[] arr, int index) {

    // 新数组,每发现一个就去除一个.所以长度-1 就行
    int[] newArr = new int[arr.length - 1];
    // 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标
    int c = 0;
    for (int i = 0; i < arr.length; i++) {
        // 判断传进来的那个重复的下标和数组中的下标相等时,下标的元素就不用重新赋给新数组了
        if (index != i) {
            newArr[c] = arr[i];
            c++;
        }
    }
//System.out.println("newArr:"+newArr.toString());
    //bl(newArr);
    return newArr;
}

//遍历数组
//public static void bl(int[] arr){
//    for(int i = 0 ; i < arr.length ; i++){
//        System.out.print(arr[i]+ ",    ");
//    }
//}

 

第三种方法;

/**第三种方法:
     * 
     *  相同的一起删除,当发现相同的元素,先统计重复的个数,然后一起删掉,得到新数组赋给旧数组 */

    public static void main(String[] args) {

        int[] arr = { 8, 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 };

        arr = a2(arr);

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static int[] a2(int[] arr) {

        int a = 0;

        for (int i = 0; i < arr.length - 1; i++) {

            for (int j = i; j < arr.length - 1; j++) {

                // 如果有相同的,就统计出相同元素的个数
                if (arr[i] == arr[j + 1]) {
                    a += 1;
                }
            }
            if (a != 0) {
                // return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系)
                arr = a1(arr, arr[i], a);
                // 一个元素个数获得到,统计变量清零,等待回去下一个元素重复的个数
                a = 0;
            }
        }
        System.out.print("方法a2:");
        bl(arr);
        return arr;
    }

    // 删除里面重复的元素
    public static int[] a1(int[] arr, int arr2, int a) {
        // 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标
        int c = 1;
        // 获得新数组的长度,就是旧数组减去元素重复的次数
        int[] aa = new int[arr.length - a];
        // 重复的元素也要保留一个
        aa[0] = arr2;
        for (int i = 0; i < arr.length; i++) {
            // 不与重复元素相同的元素都非给新数组
            if (arr2 != arr[i]) {
                aa[c++] = arr[i];
            }
        }
        System.out.print("方法a1:");
        bl(aa);
        return aa;
    }

    //遍历数组
    public static void bl(int[] arr){
        for(int i = 0 ; i < arr.length ; i++){
            System.out.print(arr[i] + ",    ");
        }
        System.out.println("数组遍历完毕。");
    }    

参考文档: https://blog.csdn.net/binLi_Cheng/article/details/81383197

android studio jar 包添加 的 三种方法

android studio jar 包添加 的 三种方法

 

转载时请记得标明源地址:https://my.oschina.net/lijindou/blog/717000

本人博客地址:  http://my.oschina.net/lijindou/blog

 

 

一 、    在 AS 中看  看项目  一般来说 有两种模式  android  and   Project  这两种模式 

通过这两个不同的模式找到  build.gradle 这个文件  打开

在这块 加入这 句话 就好了!!!,每个 jar 包都有不同的路径,这块是 gson 的 jar 包,其他的 jar 包就要自己在网上找了!!!

二、可以直接在网上下载一个 gson 的 jar ,然后复制到  lib 包 下  ,这个时候的 jar  还是没有加入到项目中的,如图:

大家可以明显看出 有不一样的然后

然后点击 Add As Library  这个选项 将 jar 包添加到项目 中

三、

然后会打开这个页面,大家可以跟着界面上的箭头做

 

然后,继续

然后,添加 就好了!!!

Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)

Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)

 android新特性页面,ViewPager拖拽到最后一页再拖拽打开其他Activity.实现的方式有很多,效果比较好的就是到了最后一页再拖拽出现禁止蓝色条时再跳转activity

方式一:拿到ViewPager的边界条EdgeEffectCompat,判断是否到了边界(获取EdgeEffectCompat通过反射,方法来自网络最后边会给出原文)

/** 
* 初始化view 
*/ 
private void initView(){ 
pager = (ViewPager) findViewById(R.id.help_viewpages); 
try { 
Field leftEdgeField = pager.getClass().getDeclaredField("mLeftEdge"); 
Field rightEdgeField = pager.getClass().getDeclaredField("mRightEdge"); 
if (leftEdgeField != null && rightEdgeField != null) { 
leftEdgeField.setAccessible(true); 
rightEdgeField.setAccessible(true); 
leftEdge = (EdgeEffectCompat) leftEdgeField.get(pager); 
rightEdge = (EdgeEffectCompat) rightEdgeField.get(pager); 
} 
} catch (Exception e) { 
e.printstacktrace(); 
} 
pager.setonPagechangelistener(new OnPagechangelistener() { 
@Override 
public void onPageScrollStateChanged(int arg0) { 
if(rightEdge!=null&&!rightEdge.isFinished()){//到了最后一张并且还继续拖动,出现蓝色限制边条了 
startActivity(new Intent(HelpActivity.this,MainActivity.class)); 
HelpActivity.this.finish(); 
} 
} 
@Override 
public void onPageSelected(int arg0) { 
} 
@Override 
public void onPageScrolled(int arg0,float arg1,int arg2) { 
} 
}); 

方法二:也是在OnPagechangelistener里判断当前滚动的页数是不是最后一页

pager.setonPagechangelistener(new OnPagechangelistener() { 
@Override 
public void onPageSelected(int arg0) { 
} 
@Override 
public void onPageScrolled(int arg0,int arg2) { 
} 
@Override 
public void onPageScrollStateChanged(int arg0) { 
//判断当前页数是否==总页数 
} 
}); 

在此小编推荐方法一,方法二需要判断PageScrollStateChanged(int arg0)的滚动状态,也可以实现一样的效果

转载高手ViewPager在拖拽到左边和右边的时候,禁止显示黄色或者蓝色的渐变图片的解决方法(以备自己以后查阅)

package com.example.viewpagertest; 
import java.lang.reflect.Field; 
import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPagechangelistener; 
import android.support.v4.widget.EdgeEffectCompat; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
public class MainActivity extends Activity implements OnPagechangelistener { 
private ViewPager viewpager; 
private List<ImageView> views; 
private EdgeEffectCompat leftEdge; 
private EdgeEffectCompat rightEdge; 
private int[] ids = {R.drawable.iframe_4,R.drawable.iframe_5,R.drawable.iframe_6,R.drawable.iframe_7,R.drawable.iframe_8}; 
private MyAdapter adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
initView(); 
} 
private void initView() { 
viewpager = (ViewPager) findViewById(R.id.viewpager); 
initViewPager(); 
initData(); 
} 
private void initData() { 
views = new ArrayList<ImageView>(); 
for(int i=0;i<ids.length;i++){ 
ImageView iv = new ImageView(this); 
iv.setimageResource(ids[i]); 
views.add(iv); 
} 
adapter = new MyAdapter(); 
viewpager.setAdapter(adapter); 
viewpager.setonPagechangelistener(this); 
} 
class MyAdapter extends PagerAdapter{ 
@Override 
public int getCount() { 
return views.size(); 
} 
@Override 
public boolean isViewFromObject(View arg0,Object arg1) { 
return arg0==arg1; 
} 
@Override 
public void destroyItem(ViewGroup container,int position,Object object) { 
((ViewPager)container).removeView(views.get(position)); 
} 
@Override 
public Object instantiateItem(ViewGroup container,int position) { 
((ViewPager)container).addView(views.get(position)); 
return views.get(position); 
} 
} 
@Override 
public void onPageScrollStateChanged(int arg0) { 
} 
@Override 
public void onPageScrolled(int arg0,int arg2) { 
if (leftEdge != null && rightEdge != null) { 
leftEdge.finish(); 
rightEdge.finish(); 
leftEdge.setSize(0,0); 
rightEdge.setSize(0,0); 
} 
} 
@Override 
public void onPageSelected(int arg0) { 
} 
private void initViewPager() { 
try { 
Field leftEdgeField = viewpager.getClass().getDeclaredField("mLeftEdge"); 
Field rightEdgeField = viewpager.getClass().getDeclaredField("mRightEdge"); 
if (leftEdgeField != null && rightEdgeField != null) { 
leftEdgeField.setAccessible(true); 
rightEdgeField.setAccessible(true); 
leftEdge = (EdgeEffectCompat) leftEdgeField.get(viewpager); 
rightEdge = (EdgeEffectCompat) rightEdgeField.get(viewpager); 
} 
} catch (Exception e) { 
e.printstacktrace(); 
} 
} 
} 

以上所述是小编给大家介绍的Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

android获取屏幕宽高与获取控件宽高(三种方法)

android获取屏幕宽高与获取控件宽高(三种方法)

1.获取屏幕宽高

方法1:

int screenWidth = getwindowManager().getDefaultdisplay().getWidth(); // 屏幕宽(像素,如:480px) 
int screenHeight = getwindowManager().getDefaultdisplay().getHeight(); // 屏幕高(像素,如:800p) 
Log.e(TAG + " getDefaultdisplay","screenWidth=" + screenWidth + "; screenHeight=" + screenHeight); 

方法2:

displayMetrics dm = new displayMetrics(); 
dm = getResources().getdisplayMetrics(); 
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0) 
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320) 
float xdpi = dm.xdpi; 
float ydpi = dm.ydpi; 
Log.e(TAG + " displayMetrics","xdpi=" + xdpi + "; ydpi=" + ydpi); 
Log.e(TAG + " displayMetrics","density=" + density + "; densityDPI=" + densityDPI); 
screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px) 
screenHeight = dm.heightPixels; // 屏幕高(像素,如:800px) 
Log.e(TAG + " displayMetrics(111)","screenWidth=" + screenWidth + "; screenHeight=" + screenHeight); 

方法3:

dm = new displayMetrics(); 
getwindowManager().getDefaultdisplay().getMetrics(dm); 
density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0) 
densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320) 
xdpi = dm.xdpi; 
ydpi = dm.ydpi; 
Log.e(TAG + " displayMetrics","density=" + density + "; densityDPI=" + densityDPI); 
int screenWidthDip = dm.widthPixels; // 屏幕宽(dip,如:320dip) 
int screenHeightDip = dm.heightPixels; // 屏幕宽(dip,如:533dip) 
Log.e(TAG + " displayMetrics(222)","screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip); 
screenWidth = (int)(dm.widthPixels * density + 0.5f); // 屏幕宽(px,如:480px) 
screenHeight = (int)(dm.heightPixels * density + 0.5f); // 屏幕高(px,如:800px) 
Log.e(TAG + " displayMetrics(222)","screenWidth=" + screenWidth + "; screenHeight=" + screenHeight); 

2.获取控件的宽高,一般来说,我们在onCreate里面得到的控件的宽高全是0.采用下面的方法,可以得到真实的宽高

方法一 :

int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
imageView.measure(w,h); 
int height =imageView.getMeasuredHeight(); 
int width =imageView.getMeasuredWidth(); 
textView.append("\n"+height+","+width); 

此方法会加载onMeasure三次

方法二 :

ViewTreeObserver vto = imageView.getViewTreeObserver(); 
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
  public boolean onPreDraw() { 
    int height = imageView.getMeasuredHeight(); 
    int width = imageView.getMeasuredWidth(); 
    textView.append("\n"+height+","+width); 
    return true; 
  } 
}); 

此方法会加载onMeasure二次,但是回调函数会回调很多次

方法三:

ViewTreeObserver vto2 = imageView.getViewTreeObserver();  
vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
   @Override  
   public void onGlobalLayout() { 
    imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);  
    textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); 
  }  
}); 

此方法会加载onMeasure二次,但是回调函数只回调一次  

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程小技巧!

今天关于Android 自定义弹性ListView控件实例代码(三种方法)android弹性布局的讲解已经结束,谢谢您的阅读,如果想了解更多关于(PASS)JAVA数组去重 三种方法 (不用集合)、android studio jar 包添加 的 三种方法、Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)、android获取屏幕宽高与获取控件宽高(三种方法)的相关知识,请在本站搜索。

本文标签: