2014-06-28 55 views
0

我有一個佈局如下增加父母的寬度時子視圖加入

Horizontal Scroll View: id - container 
    Scroll View: width & height - match_parent 
     Relative Layout: id - wrapper, width & height - match_parent 
      View 
      LinearLayout: id - timeline, width & height - match_parent 
      LinearLayout: id - body, width & height - match_parent 

「容器」具有初始寬度。我想在寬度等於容器的「body」中添加一個LinearLayout。這個線性佈局在裏面有多個文本視圖。但是我想增加「容器」的寬度以及文本視圖超過初始寬度時的線性佈局,以便在添加文本視圖時不會剪切。下面是我如何做它:

這是LinearLayout中我嘗試加入到「身體」

public class Layer extends LinearLayout { 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 100); 
    }; 

    public void addTextView(CharSequence text) { 
     TextView tv = new TextView(text); 
     addView(tv); 
     if(this.getWidth() < tv.getX() + tv.getWidth()) { 
      RelativeLayout wrapper = (RelativeLayout) findViewById(R.id.wrapper); 
      wrapper.setMinimumWidth(size); 
      wrapper.invalidate(); 
     } 
    } 

我在這條線得到一個NullPointerException異常「wrapper.setMinimumWidth(大小);」 。還有其他更好的方法嗎?我有點卡住了。任何幫助,將不勝感激!

+0

我猜findByViewId(R.id.wrapper)返回null。這可能是錯誤。 –

+0

是的,你是對的。 findViewById返回null。你有什麼想法爲什麼它會返回null,當我在我的主要活動中提到時它工作正常。 –

+0

我也試過getRootView()。setMinimumWidth()和getRootView()。invalidate()...但尺寸保持不變! –

回答

0

好吧,我找到了解決方案。我有一個包含我的自定義視圖作爲私有成員變量的片段。 onCreateView()片段的方法返回了自定義視圖變量。在我的自定義視圖類中,findViewById()返回null。所以我通過getActivity()從我的片段傳遞到我的自定義視圖類,並將其投入到活動,使其工作!

((Activity)context).findViewById()

希望這有助於!