From 7e6cc4e84662285b42c6efa13a4bf9a2c9ec1d7a Mon Sep 17 00:00:00 2001 From: Mygod Date: Fri, 20 Jan 2017 06:10:50 +0800 Subject: [PATCH] Refine EditTextPreference layout --- .../res/layout/preference_dialog_edittext.xml | 40 +++++++++++++++++++ .../mygod/preference/EditTextPreference.scala | 12 ++++++ .../EditTextPreferenceDialogFragment.scala | 16 ++++---- 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 plugin/src/main/res/layout/preference_dialog_edittext.xml diff --git a/plugin/src/main/res/layout/preference_dialog_edittext.xml b/plugin/src/main/res/layout/preference_dialog_edittext.xml new file mode 100644 index 00000000..34c8f873 --- /dev/null +++ b/plugin/src/main/res/layout/preference_dialog_edittext.xml @@ -0,0 +1,40 @@ + + + + + + + + diff --git a/plugin/src/main/scala/be/mygod/preference/EditTextPreference.scala b/plugin/src/main/scala/be/mygod/preference/EditTextPreference.scala index 88da9663..e23d261a 100644 --- a/plugin/src/main/scala/be/mygod/preference/EditTextPreference.scala +++ b/plugin/src/main/scala/be/mygod/preference/EditTextPreference.scala @@ -25,6 +25,9 @@ import android.support.v7.preference.{EditTextPreference => Parent} import android.support.v7.widget.AppCompatEditText import android.text.InputType import android.util.AttributeSet +import android.view.ViewGroup +import android.widget.FrameLayout +import com.github.shadowsocks.plugin.R /** * Fixed EditTextPreference + SummaryPreference with password support! @@ -35,6 +38,15 @@ class EditTextPreference(context: Context, attrs: AttributeSet = null) extends P val editText = new AppCompatEditText(context, attrs) editText.setId(android.R.id.edit) + { + val arr = context.obtainStyledAttributes(Array(R.attr.dialogPreferredPadding)) + val margin = arr.getDimensionPixelOffset(0, 0) + arr.recycle() + val params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + params.setMargins(margin, 0, margin, 0) + editText.setLayoutParams(params) + } + override def createDialog() = new EditTextPreferenceDialogFragment() override protected def getSummaryValue: String = { diff --git a/plugin/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala b/plugin/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala index 718b9287..dadf7893 100644 --- a/plugin/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala +++ b/plugin/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala @@ -20,7 +20,6 @@ package be.mygod.preference -import android.content.Context import android.support.v14.preference.PreferenceDialogFragment import android.support.v7.widget.AppCompatEditText import android.view.{View, ViewGroup} @@ -29,17 +28,20 @@ class EditTextPreferenceDialogFragment extends PreferenceDialogFragment { private lazy val preference = getPreference.asInstanceOf[EditTextPreference] protected lazy val editText: AppCompatEditText = preference.editText - override protected def onCreateDialogView(context: Context): AppCompatEditText = { - val parent = editText.getParent.asInstanceOf[ViewGroup] - if (parent != null) parent.removeView(editText) - editText - } - override protected def onBindDialogView(view: View) { super.onBindDialogView(view) editText.setText(preference.getText) val text = editText.getText if (text != null) editText.setSelection(0, text.length) + val oldParent = editText.getParent.asInstanceOf[ViewGroup] + if (oldParent eq view) return + if (oldParent != null) oldParent.removeView(editText) + val oldEdit = view.findViewById(android.R.id.edit) + if (oldEdit == null) return + val container = oldEdit.getParent.asInstanceOf[ViewGroup] + if (container == null) return + container.removeView(oldEdit) + container.addView(editText, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) } override protected def needInputMethod = true