2016-05-15 4 views
0

は、私は、XMLAndroidでxmlのないビューを作成することはできますか?それは私がこのonLayoutを使用する必要があります</p> <p>何も表示されない、

public class MyView extends ViewGroup { 

    public MyView (Context context) { 
     super(context); 
     setBackgroundColor(0xffff0000); 

     RelativeLayout base = new RelativeLayout(context); 

     RelativeLayout.LayoutParams rP = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     base.setBackgroundColor(0xff00ff00); 
     base.setLayoutParams(rP); 

     RelativeLayout.LayoutParams iP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     ImageView icon = new ImageView(context); 
     icon.setBackgroundResource(android.R.drawable.ic_menu_add); 
     icon.setLayoutParams(iP); 

     addView(icon); 
     addView(base); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 

    } 
} 

せずにカスタムビューを作成し、actitvy

MyView myview = new MyView(this); 
WindowManager.LayoutParams baseParams = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.MATCH_PARENT, 
     WindowManager.LayoutParams.MATCH_PARENT, 
     WindowManager.LayoutParams.TYPE_PHONE, 
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     PixelFormat.TRANSLUCENT); 
addContentView(myview, baseParams); 

でそれを使用しようとしています。しかしLayoutParamsは動作しません。それを表示させるために、基本レイアウトはMATCH_PARENTではなく、アイコンはWRAP_CONTENTではありません

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    final View child = getChildAt(0); 
    final View child2 = getChildAt(1); 

    child.layout(0, 0, 300, 300); 
    child2.layout(0, 0, 300, 300); 
} 

私はまた、レイアウトにアイコンを追加しようとしましたが、このアプリは

base.addView(icon); 

はサイズと位置をハードコーディングせずに、このレイアウトを作成することが可能ですクラッシュしますか?

RelativeLayout.LayoutParamsをチェックしましたが、centerInParentをtrueに設定するメソッドが見つかりませんでした。

http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@android:drawable/ic_menu_add" 
     android:layout_centerInParent="true" 
     /> 
</RelativeLayout> 
+2

'WindowManager.LayoutParams'は、' Activity'内の 'View'のためのものではありません。私はあなたが何をしようとしているのかよく分かりませんが、カスタムの 'View'をレイアウト全体として使いたい場合は' setContentView() 'を呼び出してください。それ以外の場合は、 'Activity'のレイアウトにある' ViewGroup'に追加してください。 'RelativeLayout.LayoutParams'を中心に、あなたは' addRule() 'メソッドを探しています。 –

+0

また、 'ViewGroup'はその子をレイアウトすることについて何も知らない。実際には、カスタムの 'ViewGroup'のコードの残りの部分を実装するか(空の' onLayout() 'メソッドを埋め込むなど)、または特定のレイアウトルールを持つ他のクラスを拡張します(例えば、ラップしようとするのではなく' RelativeLayout'を拡張します'RelativeLayout')。 – CommonsWare

答えて

0

このコードを試してみてください。

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Create parent RelativeLayout 
     RelativeLayout relParent = new RelativeLayout(this); 
     RelativeLayout.LayoutParams relParentParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 
     relParent.setLayoutParams(relParentParam); 

     // Create child ImageView 
     ImageView imgView = new ImageView(this); 
     RelativeLayout.LayoutParams imgViewParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     imgView.setLayoutParams(imgViewParams); 
     imgView.setImageResource(android.R.drawable.ic_menu_add); 
     imgViewParams.addRule(RelativeLayout.CENTER_IN_PARENT); 

     // Add child ImageView to parent RelativeLayout 
     relParent.addView(imgView); 

     // Set parent RelativeLayout to your screen 
     setContentView(relParent, relParentParam); 
    } 

} 
+0

これは質問に答えません。疑問は、 'WindowManager'によって使用されるカスタム' ViewGroup'を作成することです。アクティビティを作成することではありません。 – CommonsWare

+0

OKですが、タイトルはXMLなしでビューを作成するように頼みます – Harsh4789

+0

答えはタイトルに関連するポストコードだけではなく、質問に答える必要があります。 – CommonsWare

関連する問題

 関連する問題