概要
Android StudioでAndroidアプリケーションを制作しております。
今回、ViewGroup.addViewを利用してViewを追加する処理を行ってみたのですが、子Viewが表示されません。
ソースコード
使用しているソースは以下の通りです。
Kotlin
1MainActivityクラス 2 3class MainActivity : AppCompatActivity() { 4 var mainView: MainView? = null; 5 var button: Button? = null; 6 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 setContentView(R.layout.activity_main) 10 11 mainView = this.findViewById(R.id.mainView) 12 mainView?.setActivity(this) 13 mainView?.setWillNotDraw(false) 14 mainView?.setBackgroundColor(Color.BLUE) 15 16 button = this.findViewById(R.id.button) 17 button?.setOnClickListener(mainView) 18 } 19}
Kotlin
1MainViewクラス 2 3class MainView : ViewGroup, View.OnClickListener { 4 val MP = ViewGroup.LayoutParams.MATCH_PARENT; 5 6 var parents: Activity? = null; 7 8 constructor(c: Context) : super(c) 9 { 10 } 11 constructor(c: Context, a: AttributeSet) : super(c, a) 12 { 13 } 14 15 fun setActivity(a: Activity) 16 { 17 parents = a 18 } 19 20 override fun onLayout(p0: Boolean, p1: Int, p2: Int, p3: Int, p4: Int) { 21 } 22 23 override fun onClick(p0: View?) { 24 var temp: ConstraintLayout = parents?.getLayoutInflater()?.inflate(R.layout.child_view, null) as ConstraintLayout 25 var textView: TextView = temp.findViewById(R.id.textView) 26 var params: ViewGroup.LayoutParams = ViewGroup.LayoutParams(MP, MP) 27 28 temp.setWillNotDraw(false) 29 textView.setWillNotDraw(false) 30 31 textView.setBackgroundColor(Color.GREEN) 32 textView.setTextColor(Color.RED) 33 textView.setText("test") 34 35 this.addView(temp, params) 36 } 37}
XML
1activity_main.xml 2 3<?xml version="1.0" encoding="utf-8"?> 4<androidx.constraintlayout.widget.ConstraintLayout 5 xmlns:android="http://schemas.android.com/apk/res/android" 6 xmlns:app="http://schemas.android.com/apk/res-auto" 7 xmlns:tools="http://schemas.android.com/tools" 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 tools:context=".MainActivity"> 11 12 <LinearLayout 13 android:layout_width="match_parent" 14 android:layout_height="match_parent" 15 android:orientation="vertical" > 16 17 <Button 18 android:id="@+id/button" 19 android:layout_width="match_parent" 20 android:layout_height="wrap_content" 21 android:text="Button" /> 22 23 <com.example.kotlin_dmy.MainView 24 android:id="@+id/mainView" 25 android:layout_width="match_parent" 26 android:layout_height="match_parent" /> 27 </LinearLayout> 28</androidx.constraintlayout.widget.ConstraintLayout>
XML
1child_view.xml 2 3<?xml version="1.0" encoding="utf-8"?> 4<androidx.constraintlayout.widget.ConstraintLayout 5 xmlns:android="http://schemas.android.com/apk/res/android" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent"> 8 9 <TextView 10 android:id="@+id/textView" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" /> 13 14</androidx.constraintlayout.widget.ConstraintLayout>
想定している動作と現状
想定している動作としては、setContentViewによって親Viewを配置。
その親ViewにあるButtonを入力することで、MainViewにてchild_viewをinflateし、子ViewをaddViewする形です。
その際、親ViewのBackGroundColorを青、子ViewのBackGroundColorを緑としているのですが、画面は青のままとなっています。
処理そのものは正常に動作しており、各種インスタンスも生成されています。
よく指摘されるsetWillNotDrawもfalseに設定済みです。
なお、この現象はエミュレータ、実機双方で起こっている状態です。
何か他にも設定が足りないのでしょうか?
お気付きの点ございましたら、ご指摘、ご教授をお願いいたします。
回答1件
あなたの回答
tips
プレビュー