想要实现的效果如下:
实现后:
稍微有点复杂:
看下整体的outline:
其实也不是很复杂,中间的分割线使用的是TextView,高度为1dp,屏幕群消息的两个按钮一个不可见,退出群聊和解散群聊的原理一样,GridView是自定义,这样可以避免ScrollView和GridView一起使用带来的问题。
核心代码:
<?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:background="#f2f0eb"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/height_top_bar"
android:background="@color/common_top_bar_blue"
android:gravity="center_vertical" >
<LinearLayout
android:layout_width="45dp"
android:layout_height="match_parent"
android:background="@drawable/common_tab_bg"
android:onClick="back" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="9dp"
android:scaleType="centerInside"
android:src="@drawable/our_group_back_on" />
</LinearLayout>
<TextView
android:id="@+id/group_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="#ffffff"
android:textSize="20sp" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="26dp"
android:layout_height="26dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="7dp" />
</RelativeLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f0eb" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="vertical" >
<com.dystu.impro.widget.ExpandGridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="13dp"
android:background="@drawable/app_pref_bg"
android:columnWidth="52dp"
android:gravity="start"
android:horizontalSpacing="6dp"
android:listSelector="@android:color/transparent"
android:numColumns="4"
android:verticalSpacing="10dp" >
</com.dystu.impro.widget.ExpandGridView>
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#E6E6E6" />
<RelativeLayout
android:id="@+id/clear_all_history"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="6dp"
android:background="@drawable/btn_bottom_selector" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:gravity="center_vertical|left"
android:paddingLeft="20dip"
android:text="清空聊天记录"
android:textColor="@android:color/black"
android:textSize="18sp"
android:typeface="serif" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_change_group_name"
android:layout_width="match_parent"
android:layout_height="50dip"
android:layout_marginTop="6dp"
android:background="@drawable/btn_bottom_selector" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:gravity="center_vertical|left"
android:paddingLeft="20dip"
android:text="改变群名称"
android:textColor="@android:color/black"
android:textSize="18sp"
android:typeface="serif" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_blacklist"
android:layout_width="match_parent"
android:layout_height="50dip"
android:layout_marginTop="6dp"
android:background="@drawable/btn_bottom_selector" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:gravity="center_vertical|left"
android:paddingLeft="20dip"
android:text="黑名单列表"
android:textColor="@android:color/black"
android:textSize="18sp"
android:typeface="serif" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_switch_block_groupmsg"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="10dip"
android:text="屏蔽群消息"
android:textColor="@android:color/black"
android:textSize="18sp"
android:typeface="serif" />
<ImageView
android:id="@+id/iv_switch_block_groupmsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/open_icon"
android:visibility="invisible" />
<ImageView
android:id="@+id/iv_switch_unblock_groupmsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/close_icon"
android:visibility="visible" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
<Button
android:id="@+id/btn_exit_grp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="11dp"
android:background="@drawable/btn_style_alert_dialog_special"
android:onClick="exitGroup"
android:paddingBottom="7dp"
android:paddingTop="7dp"
android:text="退出群聊"
android:textColor="@android:color/white"
android:textSize="18sp" />
<Button
android:id="@+id/btn_exitdel_grp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginTop="6dp"
android:background="@drawable/btn_style_alert_dialog_special"
android:onClick="exitDeleteGroup"
android:paddingBottom="7dp"
android:paddingTop="7dp"
android:text="解散群聊"
android:textColor="@android:color/white"
android:textSize="18sp"
android:visibility="gone" />
</LinearLayout>
</ScrollView>
</LinearLayout>
自定义的GridView的代码:
package com.dystu.impro.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
public class ExpandGridView extends GridView {
public ExpandGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExpandGridView(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
主要是解决高度的问题。