3

Android 1.5から4.0まで動作するアプリがあります。Android 4.1 では、単純な EditTextPreference で問題が発生します。アプリは常に横向きモードです。チーム名を出すとこんな感じ。

写真 1 http://myweb.midco.net/hgs/s1.jpg

次に、[テキスト フィールドの編集] をクリックすると、常にこのように表示されます。

写真 1 http://myweb.midco.net/hgs/s2.jpg

しかし、私のエミュレーターと、Android 4.1 を搭載した Samsung Galaxy Tab 2 に関する苦情から、これが得られました。

写真 1 http://myweb.midco.net/hgs/s3.jpg

これにより、テキスト フィールドが押しつぶされます。マニフェストを

android:windowSoftInputMode="stateVisible|adjustResize"

また

android:windowSoftInputMode="stateVisible|adjustPan"

役に立っていません。タイトルを空白のままにすると、タイトルは削除されますが、編集テキストは表示されません。この Pref のコードは次のとおりです。

EditTextPreference teamnamePref = new EditTextPreference(this);  
teamnamePref.setTitle("Team Name"); 
teamnamePref.setKey( "t" + Team_ID );
teamnamePref.setSummary(TheTeamName); 
teamnamePref.setDialogTitle("Enter Name For Team " + Team_ID);
teamnamePref.setDefaultValue(TheTeamName);
teamnamePref.getEditText().setSingleLine(true);
TeamCategory.addPreference(teamnamePref);   

ありがとうございました

4

2 に答える 2

1

このバグを回避する方法を作成しました (Samsung Galaxy S3、Acer A501、および HTC Desire X でテスト済み)。

// This method provides a work-around for a bug with EditTextPreference and the Samsung soft keyboard.
// When in landscape mode, the Samsung keyboard can obscure the text box, as it does not use fullscreen 
// / extract mode like other keyboards do in this case.  So we manually show an alert dialog with an
// EditText control, and update the preference value manually.
//
// Usage:
// Create a normal <Preference> in your XML file, then in your corresponding fragment, retrieve the 
// preference object using its key and pass it to this method. E.g.
//
//    EditTextPreferenceHelper.CreateEditTextPreferenceDialog(
//         getActivity(), 
//         findPreference("yourPrefKey"));
public static void CreateEditTextPreferenceDialog(final Context context, Preference preference) {
    preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(final Preference preference) {

            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle(preference.getTitle());
            final EditText textBox = new EditText(context);
            textBox.setImeOptions(EditorInfo.IME_ACTION_DONE);
            textBox.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT);
            textBox.setText(PreferenceManager.getDefaultSharedPreferences(context).getString(preference.getKey(), ""));

            builder.setView(textBox);
            builder.setPositiveButton("OK", new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    PreferenceManager.getDefaultSharedPreferences(
                            context).edit().putString(preference.getKey(), 
                            textBox.getText().toString()).commit();
                    dialog.dismiss();
                }
            });
            builder.setNegativeButton("Cancel", new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            builder.create().show();
            return false;
        }
    });        
}
于 2013-05-05T03:37:12.197 に答える
0

このようなものが仕事をするはずです。ソフト入力フラグは、adjustPan などの別のものにいつでも変更できます。これが以前に機能しなかった理由は、EditTextPreference がこれらのオプションをオーバーライドするためです。

import android.content.Context;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.view.Window;
import android.view.WindowManager;


public class CustomEditTextPref extends EditTextPreference
{
    public CustomEditTextPref(Context context)
    {
        super(context);
    }

    @Override
    protected void showDialog(Bundle state)
    {
        super.showDialog(state);
        Window window = getDialog().getWindow();
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}
于 2013-05-05T05:21:05.880 に答える