0

在我当前的项目中,我有一个视图,上面三分之一有一些文本视图,中间有一个编辑文本,底部有一个按钮,所有这些都占用大致相同的空间。现在当我想在edittext中输入一些东西时,键盘弹出并且视图没有调整大小,所以键盘隐藏了一半的edittext,看起来很糟糕,或者视图被调整大小,缩小到它的一半大小,看起来......非常......糟糕。在我的应用程序的 iphone 版本中,我制作了它,所以当我点击编辑文本时,它会变大并放大,填满整个视图,因此只显示编辑文本和键盘。问题是,我完全不知道如何在 Android 中做到这一点。我已经重建了我的 xml 布局以使用 relativelayout 而不是 linearlayout,因为我认为它会更容易。然后我将更改放在 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);

很高兴看到vLayoutInflater 中的定义方式,但我猜 FrameLayout.LayoutParameters 是您想要的类。

于 2012-08-22T16:37:59.233 回答