2012-08-22 63 views
0

在我目前的項目中的某些區域我有一個視圖,其中一些textview在上三分之一,一個edittext在中間和一個按鈕在底部,所有采取大致相同空間。現在,當我想在edittext中輸入內容時,鍵盤會彈出,並且視圖不會調整大小,所以鍵盤隱藏了一半的edittext,看起來很糟糕,或者視圖被調整大小,縮小到一半大小, ...非常...蹩腳。在我的應用程序的iphone版本中,當我點擊edittext時,它會增大並放大,填滿整個視圖,所以只顯示edittext和鍵盤。問題是,我完全不知道如何在Android中完成它。我已經重建了我的xml佈局來使用relativelayout而不是linearlayout,因爲我認爲它會更容易。 後來我把變化的onFocusChange方法,像這樣:調整EditText(或一般視圖)以填充屏幕

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); 
} 

的enlargeEditText方法心不是最後,我justed想看看是否有什麼變化,但...這是不是...不是我得到:

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) 

什麼問題?有任何想法嗎?提前致謝。

+0

哪條線是88線? – Michael

+0

enlargeEditText();所以這可能是我試圖改變視圖外觀的方式,但我不知道任何其他方式。 –

+0

這是一個NullPointerException?你在哪裏定義'v'?請發佈所有的logcat錯誤。 – Sam

回答

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是你想要的類。

+0

嘿山姆,感謝您的大力幫助。我對logcat的事情感到抱歉,我知道它是什麼,通常我知道如何閱讀它們,但我昨天嘗試過兩次,它給了我這個短暫的痕跡,現在當我今天嘗試時,它給了我一個完整的跟蹤,這確實是一個classcastexception。 Eclipse有時很奇怪。此外,我現在更好地理解layoutparams。再次感謝 :) –