0

私の現在のプロジェクトでは、上部 3 分の 1 にテキストビュー、中央に編集テキスト、下部にボタンを持つビューがあり、すべてほぼ同じスペースを占めています。edittext に何かを入力しようとすると、キーボードがポップアップし、ビューのサイズが変更されないため、キーボードが edittext の半分を非表示にするか、ビューのサイズが変更されて半分のサイズに縮小されます。 ...非常に...くだらない。私のアプリのiPhoneバージョンでは、編集テキストをタップすると拡大して拡大し、ビュー全体を埋めて、編集テキストとキーボードだけが表示されるようにしました。問題は、Androidでそれを行う方法がまったくわからないことです。xml レイアウトを再構築して、linearlayout の代わりに relativelayout を使用するようにしました。簡単だと思ったからです。次に、次のように onFocusChange メソッドに変更を加えます。

et = (EditText)v.findViewById(R.id.etItems);
et.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View arg0, boolean arg1) {

        if(arg0==et) {
            if(arg1==true) {
                Log.i("EditText","got focus");
                enlargeEditText();
            } 
        } else {
            Log.i("EditText","lost focus");
        }

    }

});

private void enlargeEditText() {
   RelativeLayout.LayoutParams rllp = (LayoutParams) v.getLayoutParams();
   rllp.setMargins(0, 0, 0, 0);
   v.setLayoutParams(rllp);
}

拡大編集テキスト メソッドは最終的なものではありません。何か変更があるかどうかを確認したかっただけですが、そうではありません...代わりに次のようになります。

08-22 17:26:22.108: E/AndroidRuntime(20662):    at de.lochmann.einkaufsliste.FragCreateList$1.onFocusChange(FragCreateList.java:88)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.view.View.onFocusChanged(View.java:3938)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.widget.TextView.onFocusChanged(TextView.java:8465)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.widget.EditText.onFocusChanged(EditText.java:136)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.view.View.handleFocusGainInternal(View.java:3760)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.view.View.requestFocus(View.java:5453)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.view.View.requestFocus(View.java:5403)
08-22 17:26:22.108: E/AndroidRuntime(20662):    at android.view.View.requestFocus(View.java:5381)

どうしたの?何か案は?前もって感謝します。

4

1 に答える 1

2

エラーは ClassCastException です。ビューのレイアウト パラメータを調整するときは、親ビューのパラメータを使用する必要があります。操作したいビューは RelativeLayout ですが、パラメーターはおそらく FrameLayout に属しています。logcat の 一部しか投稿していないため、確かなことはわかりません。

これは完全な LogCat トレースです。

08-22 12:23:41.879: E/AndroidRuntime(12603): FATAL EXCEPTION: main
08-22 12:23:41.879: E/AndroidRuntime(12603): java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams
08-22 12:23:41.879: E/AndroidRuntime(12603):    at org.whatever.example.Example.resize(Example.java:80)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at org.whatever.example.Example.access$0(Example.java:79)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at org.whatever.example.Example$1.onFocusChange(Example.java:66)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.View.onFocusChanged(View.java:2789)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.widget.TextView.onFocusChanged(TextView.java:7198)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.View.handleFocusGainInternal(View.java:2612)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.View.requestFocus(View.java:3767)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1152)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.requestFocus(ViewGroup.java:1108)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1152)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.requestFocus(ViewGroup.java:1108)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1152)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.requestFocus(ViewGroup.java:1108)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1152)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewGroup.requestFocus(ViewGroup.java:1111)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.View.requestFocus(View.java:3718)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1285)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1957)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.os.Looper.loop(Looper.java:150)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at android.app.ActivityThread.main(ActivityThread.java:4263)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at java.lang.reflect.Method.invokeNative(Native Method)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at java.lang.reflect.Method.invoke(Method.java:507)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-22 12:23:41.879: E/AndroidRuntime(12603):    at dalvik.system.NativeStart.main(Native Method)

上部に例外があることに注意してください。問題の原因は、LogCat が提供できる最も重要な情報です。enlargeEditText();また、行がどのようにコンパイルされ、例外がスローされるかがわからないため、いくつかの行をスキップしたようです...

ともかく

LayoutParameters を変更するだけです。

FrameLayout.LayoutParams rllp = (FrameLayout.LayoutParams) v.getLayoutParams();
rllp.setMargins(0, 0, 0, 0);
v.setLayoutParams(rllp);

が LayoutInflater でどのようvに定義されているかを確認することもできますが、FrameLayout.LayoutParameters が必要なクラスであると推測しています。

于 2012-08-22T16:37:59.233 に答える