2016-10-07 6 views
0

activity_main.xml内にプログラムで作成されたRelativeLayout rlを追加しました。私がTextViewをrlの中に追加しようとすると、レンダリングされません。私は値をログに記録し、rlは特定の幅と高さでレンダリングされており、rlのglobalLayoutListenerは正しく呼び出されていますが、TextViewはレンダリングされません。どうして?トップのadbシェルdumpsys活動のプログラムで作成されたTextViewがRelativeLayoutに追加されない

public class MainActivity extends AppCompatActivity { 

    String TAG = MainActivity.class.getSimpleName(); 

    RelativeLayout parent, rl; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     parent = ((RelativeLayout) findViewById(R.id.activity_main)); 

     parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       rl = new RelativeLayout(getApplicationContext()); 
       (parent).addView(rl); 
       rl.setBackgroundResource(R.drawable.border); 
       rl.getLayoutParams().width = parent.getMeasuredWidth(); 
       rl.getLayoutParams().height = parent.getMeasuredHeight(); 
       Log.d(TAG, "onCreate: "+rl.getLayoutParams().width+" "+rl.getLayoutParams().height); 
       rl.requestLayout(); 

       rl.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         Log.d(TAG, "onGlobalLayout: rl"); 
         TextView tv = new TextView(getApplicationContext()); 
         tv.setText(MainActivity.class.getSimpleName()); 
         tv.setX(20); 
         tv.setY(20); 
         tv.setWidth(200); 
         tv.setHeight(200); 
         tv.setTextSize(30); 
         rl.addView(tv); 
         rl.invalidate(); 
         rl.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
        } 
       }); 

       parent.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      } 
     }); 
    } 
} 

が出力:

TASK com.siva.textproject id=2335 

ACTIVITY com.siva.textproject/.MainActivity 33e4fe6 pid=1587 

Local FragmentActivity ffb1c0 State: 

mCreated=truemResumed=true mStopped=false mReallyStopped=false 

mLoadersStarted=true 

FragmentManager misc state: 

[email protected]452 

m[email protected]470e452 

mCurState=5 mStateSaved=false mDestroyed=false 

View Hierarchy: 

com.android.internal.policy.PhoneWindow$DecorView{7e5e61c V.E..... ... 0,0-1440,2560} 

android.widget.LinearLayout{30e6323 V.E..... ... 0,0-1440,2560} 

    android.view.ViewStub{f671020 G.E..... ... 0,0-0,0 #1020469 android:id/action_mode_bar_stub} 

    android.widget.FrameLayout{e8bcdd9 V.E..... ... 0,84-1440,2560} 

    android.support.v7.widget.ActionBarOverlayLayout{914f39e V.E..... ... 0,0-1440,2476 #7f0b0043 app:id/decor_content_parent} 

     android.support.v7.widget.ContentFrameLayout{a5a0e7f V.E..... ... 0,196-1440,2476 #1020002 android:id/content} 

     android.widget.RelativeLayout{dfd0e4c V.E..... ... 0,0-1440,2280 #7f0b0054 app:id/activity_main} 

      android.widget.RelativeLayout{9e26e95 V.E..... ... 56,56-1384,2224} 

      android.widget.TextView{f58abaa V.ED.... ... 0,0-200,200} 

     android.support.v7.widget.ActionBarContainer{c8b139b V.ED.... ... 0,0 1440,196 #7f0b0044 app:id/action_bar_container} 

     android.support.v7.widget.Toolbar{c12c338 V.E..... ... 0,0-1440,196 #7f0b0045 app:id/action_bar} 

      android.support.v7.widget.AppCompatTextView{c85f11 V.ED.... ... 56,51-416,144} 

      android.support.v7.widget.ActionMenuView{a6dd876 V.E..... ... 1440,0-1440,196} 

     android.support.v7.widget.ActionBarContextView{9fd4e77 G.E..... ... 0,0-0,0 #7f0b0046 app:id/action_context_bar} 

android.view.View{5ccdae4 V.ED.... ... 0,0-1440,84 #102002f android:id/statusBarBackground} 
+0

[こちら](http://stackoverflow.com/a/10666269/5296734) –

+0

@ nick7291既に存在するRelativeLayout用です。動的に作成されたものでは機能しません。 – Siva

+0

'adb shell dumpsys activity top'の出力は何ですか? – pskink

答えて

0

setLayoutParams()

LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
TextView tv=new TextView(this); 
tv.setLayoutParams(lparams); 
tv.setText("test"); 
tv.setTextSize(30); 
rl.addView(tv); 
+0

まだレンダリングされていません。 – Siva

0

ファーストを使用してその大きさを設定し、TextViewを定義する。ここ

は私のMainActivityコードがありますグローバル変数として。インスタンス化するよりもRealativeLayout。その後、LayoutParamsを設定します。今すぐあなたの文字列をTextViewに設定することができます。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.feed_relative_layout); 
thereIsNoPost_textView = new TextView(Feed.this); 

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT, 
RelativeLayout.LayoutParams.MATCH_PARENT); 
    thereIsNoPost_textView.setText(getResources().getString(R.string.feed_no_posts_to_show)); 
thereIsNoPost_textView.setTextSize((float) 20); 
thereIsNoPost_textView.setLayoutParams(params); 
thereIsNoPost_textView.setGravity(Gravity.CENTER); 

rl.addView(thereIsNoPost_textView); 

TextViewをグローバル変数として作成することを忘れないでください。 nullに設定し、コードの他の部分にあるTextViewをクリアしたいからです。

関連する問題