54 lines
1.6 KiB
Java
54 lines
1.6 KiB
Java
package app.fedilab.android.helper;
|
|
|
|
import android.content.Context;
|
|
import android.util.AttributeSet;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ListView;
|
|
|
|
/**
|
|
* Created by Thomas on 03/09/2017.
|
|
* Expanded listview
|
|
*/
|
|
|
|
public class ExpandableHeightListView extends ListView {
|
|
|
|
boolean expanded = false;
|
|
|
|
public ExpandableHeightListView(Context context) {
|
|
super(context);
|
|
}
|
|
|
|
public ExpandableHeightListView(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
}
|
|
|
|
public ExpandableHeightListView(Context context, AttributeSet attrs, int defStyle) {
|
|
super(context, attrs, defStyle);
|
|
}
|
|
|
|
public boolean isExpanded() {
|
|
return expanded;
|
|
}
|
|
|
|
public void setExpanded(@SuppressWarnings("SameParameterValue") boolean expanded) {
|
|
this.expanded = expanded;
|
|
}
|
|
|
|
@Override
|
|
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
// HACK! TAKE THAT ANDROID!
|
|
if (isExpanded()) {
|
|
// Calculate entire height by providing a very large height hint.
|
|
// But do not use the highest 2 bits of this integer; those are
|
|
// reserved for the MeasureSpec mode.
|
|
int expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST);
|
|
super.onMeasure(widthMeasureSpec, expandSpec);
|
|
|
|
ViewGroup.LayoutParams params = getLayoutParams();
|
|
params.height = getMeasuredHeight();
|
|
} else {
|
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
|
}
|
|
}
|
|
} |