事件分发

package com.zcp.sjff;

import com.zcp.view.Mylist;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {
String[] books = {"A语言","B语言","C语言","D语言","E语言","A1语言","B1语言","C1语言","D1语言","E1语言","A2语言","B2语言","C2语言","D2语言","E2语言","A2语言","B2语言","C语言","D语言","E语言"};
private Mylist listview;
private ArrayAdapter ladapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(Mylist)findViewById(R.id.listview);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, books);
listview.setAdapter(adapter);
setListViewHeightBasedOnChildren(listview);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);

}
private void setListViewHeightBasedOnChildren(Mylist listView) {
ladapter=(ArrayAdapter)listView.getAdapter();
if(ladapter!=null){
return;
}
int totalHeight=0;
for (int i = 0; i <ladapter.getCount(); i++) {
View item = ladapter.getView(i, null,listView);
if(item!=null){
item.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
item.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
totalHeight += item.getMeasuredHeight();
}
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (ladapter.getCount() - 1))
+ listView.getPaddingTop() + listView.getPaddingBottom();
int h = getWindowManager().getDefaultDisplay().getHeight();
if(params.height > h/2){
params.height = h/2;
}
listView.setLayoutParams(params);
}

}

//自定义listview

package com.zcp.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

public class Mylist extends ListView {

public Mylist(Context context, AttributeSet attrs) {
super(context, attrs);

}


}

//自定义ScrollView

package com.zcp.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

public class ScView extends ScrollView {

public ScView(Context context, AttributeSet attrs) {
super(context, attrs);

}

}

Xml配置布局

<com.zcp.view.ScView 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"
tools:context=".MainActivity" >
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
<com.zcp.view.Mylist
android:id="@+id/listview"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
<Button
android:id="@+id/change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="改变listview的高"
/>
</LinearLayout>

</com.zcp.view.ScView>

原文地址:https://www.cnblogs.com/hnpy/p/5455239.html