EditTextPreference 下自定义弹出Dialog并获取

1自定义Dialog布局并加入EditTextPrefernce

Preference的布局文件

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen   
    xmlns:android="http://schemas.android.com/apk/res/android"   
    android:title=" ">  
    <PreferenceCategory   
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:title="Exit"  
        android:summary="settings about exit">  
	    <CheckBoxPreference
	        android:title="Completely exit?"
	        android:summaryOn="Yes,Activity Completely exit."  
	        android:summaryOff="No,Service run."
	        android:defaultValue="true" 
	        android:key="@string/Config_Exit">
	    </CheckBoxPreference>  
	</PreferenceCategory>
	
    <PreferenceCategory   
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:title="Server"  
        android:summary="settings about Server">
        <EditTextPreference 
            android:positiveButtonText="Positive" 
            android:negativeButtonText="Negative" 
            android:dialogLayout="@layout/config_dialog_server" 
            android:dialogTitle="@string/Manually_Server" 
            android:key="@string/Config_Manually_Server" 
            android:title="@string/Manually_Push_Server"/>
        
        <EditTextPreference
            android:dialogTitle="@string/Auto_Server" 
            android:dialogLayout="@layout/config_loading" 
            android:negativeButtonText="Negative" 
            android:positiveButtonText="Positive"
            android:key="@string/Config_Auto_Server" 
            android:title="@string/Auto_Server"/>
       
	</PreferenceCategory>
	
    <PreferenceCategory   
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:title="Push Server"  
        android:summary="settings about Push Server">  
	    <EditTextPreference 
            android:positiveButtonText="Positive" 
            android:negativeButtonText="Negative" 
            android:dialogLayout="@layout/config_dialog_server" 
            android:dialogTitle="@string/Manually_Push_Server" 
            android:key="@string/Config_Manually_Push_Server" android:title="@string/Manually_Push_Server"/>
        <EditTextPreference 
            android:dialogTitle="@string/Auto_Push_Server" 
            android:dialogLayout="@layout/config_loading" 
            android:negativeButtonText="Negative" 
            android:positiveButtonText="Positive" 
            android:key="@string/Config_Auto_Push_Server"
            android:title="@string/Auto_Push_Server"/>
	</PreferenceCategory>
</PreferenceScreen>  

自定义Dialog的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="#ffffff">

    <LinearLayout 
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:orientation="horizontal"
    	android:layout_gravity="center"
    	android:layout_marginTop="20dp">
	    <TextView
	        android:id="@+id/textView1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/Ip"
	        android:textAppearance="?android:attr/textAppearanceLarge" />
	
	    <EditText
	        android:id="@+id/editText1"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:ems="10"
	        android:layout_marginLeft="22dp"
	        android:inputType="number|text" >
	
	    </EditText>
	</LinearLayout>
	
    <LinearLayout 
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:orientation="horizontal"
    	android:layout_gravity="center"
    	android:layout_marginTop="10dp"
    	android:layout_marginBottom="20dp">
	    <TextView
	        android:id="@+id/textView2"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/Port"
	        android:textAppearance="?android:attr/textAppearanceLarge" />
	
	    <EditText
	        android:id="@+id/editText2"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:ems="10"
	        android:inputType="number" >
	
	    </EditText>
	</LinearLayout>
</LinearLayout>

将自定义的Dialog加入EditTextPrefernce



之后效果如下:



2在Activity中初始化并设定

addPreferencesFromResource(R.xml.config);
EditTextPreference manually_server;
ListPreference auto_server;		
auto_server=(ListPreference)findPreference(getResources().getString(R.string.Config_Auto_Server));
manually_server=(EditTextPreference)findPreference(getResources().getString(R.string.Config_Manually_Server));

在其中,获取控件的方式不是通过findviewbyid的形式,而是findPreference的形式,在xml中定义了Key,就是寻找这个Key

config_exit.setOnPreferenceChangeListener(changeListener);
manually_server.setOnPreferenceClickListener(clickListener);

设置监听事件,OnPreferenceChangeListener是状态改变事件,如果你在对话框点击了确定,就会产生这个事件
另外一个是点击事件

3定义响应事件

因为我们的Dialog是自定义的,所以我们要找到自定义Dialog的Layout,这样才能对其中的控件进行操作

在EditTextPreference中找到了一个获取Dialog布局ID的函数,返回值是Int型的ID号
manually_server.getDialogLayoutResource();
LinearLayout layout=(LinearLayout)findViewById(manually_server.getDialogLayoutResource());
EditText editText1=(EditText)layout.findViewById(R.id.editText1);
editText1.setText(ConfigDao.GetIP(context));

本来以为可以对其中的控件进行获取,可是报错editText 是 Null,说明获取的并不是Dialog的布局ID

后来又发现了这样一个函数:
EditTextPreference.getDialog();

获取的值是Dialog类,Dialog类里面有个findviewbyid()函数,这不就是获取控件的方法吗

OnPreferenceClickListener clickListener=new OnPreferenceClickListener() {
		
		@Override
		public boolean onPreferenceClick(Preference preference) {
			// TODO Auto-generated method stub
			Log.d("config","clickListener");
			
			//点击Manually_Server
			if(preference.getKey().equals(getResources().getString(R.string.Config_Manually_Server)))
			{
				
				Dialog dialog=((EditTextPreference)preference).getDialog();

				EditText editText1=(EditText)dialog.findViewById(R.id.editText1);
				editText1.setText(ConfigDao.GetIP(context));
				
				EditText editText2=(EditText)dialog.findViewById(R.id.editText2);
				editText2.setText(""+ConfigDao.GetPort(context));
				
			}
			
			return false;
		}
	};

QQ:305268748 
欢迎交流
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: EditTextPreference是一个Android平台上的Preference,它允许用户在设置界面中输入文本。用户可以在EditTextPreference中输入任何文本,例如用户名、密码等。它是Preference的一种,可以在应用程序的设置界面中使用。用户可以通过点击EditTextPreference来打开一个对话框,然后在对话框中输入文本。输入的文本将被保存在SharedPreferences中,以便在应用程序的其他部分中使用。 ### 回答2: EditTextPreference是Android中的一种Preference,可以用于输入文本或数字型数据的设置,其基本结构与其他Preference相同。当用户首次进入应用程序时,可以使用EditTextPreference获取用户的一些必要信息,例如用户名、电子邮件地址、联系方式等,并将这些信息存储在SharedPreferences对象中。 在布局文件中,可以通过以下代码来定义EditTextPreference: ``` <EditTextPreference android:key="example_text" android:title="Example Text" android:summary="This is an example text preference" android:dialogTitle="Enter your text" android:defaultValue="default value" android:inputType="text" /> ``` 其中,android:key是用于SharedPreferences的key值,android:title是该Preference在设置界面中的标题,android:summary是该Preference的简短说明,android:dialogTitle是EditTextPreference弹出对话框的标题,android:defaultValue是该Preference的默认值,android:inputType是EditTextPreference所允许输入的数据类型。 在代码中,可以通过以下方式来访问EditTextPreference: ``` EditTextPreference editTextPreference = (EditTextPreference) findPreference("example_text"); String value = editTextPreference.getText(); ``` 其中,findPreference方法用于获得Preference对象,getText方法用于获得EditTextPreference中用户输入的值。 此外,EditTextPreference还有一些其他的方法,例如setSummary方法,用于设置EditTextPreference的简短说明;setDialogMessage方法,用于设置EditTextPreference弹出对话框的消息;setDialogTitle方法,用于设置EditTextPreference弹出对话框的标题等。 总之,EditTextPreference是一种非常方便的Preference,可以轻松实现用户输入数据的功能。在实际开发中,我们可以根据需要灵活运用EditTextPreference来满足不同的需求。 ### 回答3: EditTextPreference是一种Android中的偏好设置控件,它提供了一种简单的方式来显示和修改用户设置中的文本值。它非常适合于用于设置某些字符串类型的偏好设置,例如用户名、密码、联系人信息等。 EditTextPreference提供了一个文本框让用户输入或修改值。在默认的情况下,它显示用户之前的偏好设置值。同时,用户也可以在文本框中输入新的值。当用户点击保存按钮时,EditTextPreference会将新值存储到SharedPreferences中,以供应用程序随后使用。 使用EditTextPreference非常简单,一般需要以下几个步骤: 1. 在XML布局文件中添加EditTextPreference控件 2. 在Java代码中获取EditTextPreference对象 3. 获取存储偏好设置的SharedPreferences对象 4. 为EditTextPreference设置一个键值,可以通过这个键值来获取偏好设置值 5. 为EditTextPreference设置一个监听器,当值发生改变时,可以执行相应的处理 需要注意的是,EditTextPreference不能保证输入的值的格式是否正确,因此在保存设置值之前,应该根据具体需求对设置值进行验证。 总之,使用EditTextPreference能够简化用户操作,提高用户体验,同时也方便程序员管理用户偏好设置。它是一个非常实用的偏好设置控件,适用于各种Android应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值