自定义DialogFragment

本文介绍如何使用XML布局文件和自定义按钮组件创建一个具有圆形角对话框的输入面板,包括背景颜色设置、布局调整、按钮样式定制及交互逻辑实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. drawable下的circular_corner_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:startColor="@android:color/white"
                android:endColor="@android:color/white">
            </gradient>
            <corners
                android:topLeftRadius="10dp"
                android:topRightRadius="10dp"
                android:bottomLeftRadius="10dp"
                android:bottomRightRadius="10dp">
            </corners>
        </shape>
    </item>
</selector>
2. layout下的activity_infodialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:gravity="center"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/circular_corner_dialog"
        android:id="@+id/linearlayout"
        android:orientation="vertical"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Please input your informaion"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="10dp"
            android:layout_gravity="center_horizontal"
            android:id="@+id/infoText" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Name"
            android:ems="10"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:id="@+id/name" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:hint="Height(cm)"
            android:ems="10"
            android:id="@+id/height"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_weight="1" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal" >

            <EditText
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="Gender"
                android:editable="false"
                android:ems="10"
                android:id="@+id/gender"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_weight="4" />

            <ImageButton
                android:id="@+id/male"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:src="@drawable/malebutton"
                android:layout_weight="1"
                android:layout_marginRight="10dp"
                android:background="@drawable/gener_icon_box" />

            <ImageButton
                android:id="@+id/female"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:src="@drawable/femalebutton"
                android:layout_weight="1"
                android:layout_marginRight="10dp"
                android:background="@drawable/gener_icon_box" />

        </LinearLayout>

        <com.wys.myUtils.MyCustomButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ok_button"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="10dp"
            android:layout_gravity="center_horizontal" />

        <com.wys.myUtils.MyCustomButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/cancel_button"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="20dp"
            android:layout_gravity="center_horizontal" />

    </LinearLayout>
</LinearLayout>

其中MyCustomButton是上一篇博客中自定义的Button。

3. Dialog_activity:

package com.wys.myCameraAndDialog;

import android.app.DialogFragment;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;

import com.comdosoft.face.R;
import com.wys.myUtils.MyCustomButton;

public class InfoDialogActivity extends DialogFragment {

	private EditText mUsername;  
    private EditText mHeight; 
    private EditText mGender; 
    private LinearLayout mLinearlayout; 
    private MyCustomButton ok_button;
    private MyCustomButton cancel_button;
    private ImageButton male;
    private ImageButton female;  
  
    public interface DialogActivityListener  
    {  
        void onDialogActivityComplete(EditText username, EditText height, EditText gender);  
        //隐藏软键盘
        void onDialogActivitySoftInput(LinearLayout linearlayout);  
    } 
	
	@Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
            Bundle savedInstanceState)  
    {
		getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
		//Resources res = getResources();
		//Drawable background = res.getDrawable(R.drawable.input_info_panel);
		//getDialog().getWindow().setBackgroundDrawable(background);
		// set the animations to use on showing and hiding the dialog
		//getDialog().getWindow().setWindowAnimations(R.style.MyCustomTheme);
        View view = inflater.inflate(R.layout.activity_infodialog, container, false);

        mUsername = (EditText) view.findViewById(R.id.name);
        mHeight = (EditText) view.findViewById(R.id.height);
        mGender = (EditText) view.findViewById(R.id.gender);
        mLinearlayout = (LinearLayout)view.findViewById(R.id.linearlayout);
        ok_button = (MyCustomButton) view.findViewById(R.id.ok_button);
        cancel_button = (MyCustomButton) view.findViewById(R.id.cancel_button);
        male = (ImageButton)view.findViewById(R.id.male);
        female = (ImageButton)view.findViewById(R.id.female);

        ok_button.setRadius(15);
        ok_button.setText("OK");
        ok_button.setTextNormalPressedcolor(Color.WHITE, Color.CYAN);
        ok_button.setBgNormalPressedcolor(Color.GREEN, Color.GRAY);
        cancel_button.setRadius(15);
        cancel_button.setText("Cancel");
        cancel_button.setTextNormalPressedcolor(Color.WHITE, Color.CYAN);
        cancel_button.setBgNormalPressedcolor(Color.RED, Color.GRAY);

        final DialogActivityListener listener = (DialogActivityListener) getActivity();
        listener.onDialogActivitySoftInput(mLinearlayout);

        male.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mGender.setText("male");
            }
        });

        female.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
            	mGender.setText("female");
            }
        });

        ok_button.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
            	listener.onDialogActivityComplete(mUsername, mHeight, mGender);
            }
        });

        cancel_button.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                mUsername.setText("");
                mHeight.setText("");
                mGender.setText("");
                getDialog().dismiss();
            }
        });
        return view;
    }
	
	public void onResume() {
	     super.onResume();
	     Window window = getDialog().getWindow();
	     window.setLayout(window.getAttributes().width, 900);//设置dialog的宽度
	     window.setLayout(window.getAttributes().height, 1000);//Here!
	     window.setGravity(Gravity.CENTER);
	}
}

最后实现的效果图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值