写代码的四点:
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; } }; }