写代码的四点:
1.明确需求。要做什么?
2.分析思路。要怎么做?(1,2,3……)
3.确定步骤。每一个思路要用到哪些语句、方法和对象。
4.代码实现。用具体的语言代码将思路实现出来。
学习新技术的四点:
1.该技术是什么?
2.该技术有什么特点?(使用需注意的方面)
3.该技术怎么使用?(写Demo)
4.该技术什么时候用?(在Project中的使用场景 )
----------------------早计划,早准备,早完成。-------------------------
代码如下:
package com.wy.test.other;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* 解决ScrollView嵌套ListView,ListView显示不全的问题
* 注意:ScrollView嵌套ListView时,如果ListView很长超出了屏幕的高度,
* 那么ScrollView会自动滚动到ListView的顶部,
* 但是我们需要默认在整体页面顶部,所以在初始化的时候就让ScrollView获得焦点,滚动条自然就显示到顶部了。
* scrollView.setFocusable(true);
* scrollView.setFocusableInTouchMode(true);
* scrollView.requestFocus();
*/
public class ListViewForScrollView extends ListView {
public ListViewForScrollView(Context context) {
super(context);
}
public ListViewForScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListViewForScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 重写onMeasure方法,重新计算高度,达到使ListView适应ScrollView的效果
*
* @param widthMeasureSpec 宽度测量规则
* @param heightMeasureSpec 高度测量规则
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//Integer.MAX_VALUE:表示int类型能够表示的最大值,值为2的31次方-1
//>>2:右移N位相当于除以2的N的幂
//MeasureSpec.AT_MOST:子布局可以根据自己的大小选择任意大小的模式
int newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);
}
}
在项目中的应用:
1.在xml布局文件中直接使用;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="页面需要从这里开始" />
<com.wy.test.other.ListViewForScrollView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.wy.test.other.ListViewForScrollView>
</LinearLayout>
</ScrollView>
</LinearLayout>
2.注意:ScrollView嵌套ListView时,如果ListView很长超出了屏幕的高度,那么ScrollView会自动滚动到ListView的顶部,但是我们需要默认在整体页面顶部,所以在初始化的时候就让ScrollView获得焦点,滚动条自然就显示到顶部了。
package com.wy.test;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.ScrollView;
import butterknife.ButterKnife;
import butterknife.InjectView;
/**
* ListViewForScrollView的使用
*/
public class ListViewForScrollViewActivity extends BaseActivity {
@InjectView(R.id.lv)
ListView lv;
@InjectView(R.id.scrollView)
ScrollView scrollView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listviewforscrollview);
ButterKnife.inject(this);
lv.setAdapter(baseAdapter);
//让ScrollView获得焦点
scrollView.setFocusable(true);
scrollView.setFocusableInTouchMode(true);
scrollView.requestFocus();
}
BaseAdapter baseAdapter = new BaseAdapter() {
@Override
public int getCount() {
return 100;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(getApplicationContext(), R.layout.item_gridviewforscrollview, null);
}
return convertView;
}
};
}
原文:https://blog.csdn.net/qq941263013/article/details/80237361