大家好日子,
我正在Kotlin中编写代码并尝试从两个不同的按钮获得不同的响应:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_language_choice)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
mVisible = true
// Set up the user interaction to manually show or hide the system UI.
// Upon interacting with UI controls, delay any scheduled hide()
// operations to prevent the jarring behavior of controls going away
// while interacting with the UI.
val btnCN = findViewById<LinearLayout>(R.id.custom_button_cn)
val btnUK = findViewById<LinearLayout>(R.id.custom_button_uk)
btnCN.setOnClickListener(this)
btnUK.setOnClickListener(this)
println(this)
println(btnCN)
println(btnUK)
}
override fun onClick(v: View?) {
when(v?.id){
R.id.custom_button_cn -> {
println("CHINESE")
println(v)
}
R.id.custom_button_uk -> {
println("ENGLISH")
println(v)
}
else -> {
println("ELSE!!!")
}
}
}
不幸的是,我做错了。在日志中我得到以下内容:
05-16 23:04:17.884 8674-8674/com.example.user.app I/System.out: ENGLISH
android.widget.LinearLayout{409e926 VFE...C.. ...P.... 0,0-1050,1050 #7f080035 app:id/custom_button_uk}
05-16 23:04:24.023 8674-8674/com.example.user.app I/System.out: ENGLISH
android.widget.LinearLayout{409e926 VFE...C.. ...P.... 0,0-1050,1050 #7f080035 app:id/custom_button_uk}
05-16 23:04:27.771 8674-8674/com.example.user.app I/System.out: ENGLISH
android.widget.LinearLayout{409e926 VFE...C.. ...P.... 0,0-1050,1050 #7f080035 app:id/custom_button_uk}
以下是我创建按钮的方法:
<RelativeLayout
android:id = "@+id/rel_lay"
android:layout_width="1280dp"
android:layout_height="1280dp"
android:layout_marginTop="35pt"
>
<LinearLayout
android:id="@+id/custom_button_cn"
android:layout_width="400dp"
android:layout_height="400dp"
android:background="@drawable/china_button_drawable" >
<!-- Image (BG IMG) -->
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/button_cn" />
</LinearLayout>
<LinearLayout
android:id="@+id/custom_button_uk"
android:layout_width="400dp"
android:layout_height="400dp"
android:background="@drawable/uk_button_drawable" >
<!-- Image UK -->
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/button_en" />
</LinearLayout>
</RelativeLayout>
我已经检查了代码并且无法找到任何错误,但我想我会错过某种Kotlin技巧。为了测试,我试图删除图像,为图像添加ID,尝试逐层访问,例如将id提供给相对布局,而不是线性,最后到图像,因此访问内心的事。尽管如此,它还没有奏效。你能解释一下解决按钮的正确方法是什么,并为每个按钮获得相应的活动吗?
答案 0 :(得分:2)
在RelativeLayout
中,除非受布局约束的限制,否则子项将按声明的顺序排列在彼此之上。您的CN和UK按钮布局没有布局限制,因此UK按钮布局位于CN布局之上,并且由于它完全覆盖了底层布局,因此只能接收到点击。
您可以通过向布局添加相应的约束来使按钮彼此相邻。例如,android:layout_toEndOf="@id/custom_button_cn"
到custom_button_uk
,或将父RelativeLayout
更改为LinearLayout
。
答案 1 :(得分:1)
假设您的布局正常(参考@ laalto的答案),请尝试使用匿名监听器:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:checkableBehavior="single"
>
<item
android:id="@+id/home"
android:title="@string/home"
android:icon="@mipmap/home"
/>
<item
android:id="@+id/sponsor_1"
android:title="@string/spons1"
android:icon="@mipmap/video"
/>
<item
android:id="@+id/sponsor_2"
android:title="@string/spons2"
android:icon="@mipmap/video"
/>
<item
android:id="@+id/sponsor_3"
android:title="@string/spons3"
android:icon="@mipmap/video"
/>
<item
android:id="@+id/history"
android:title="@string/NavHistory"
android:icon="@mipmap/history"
/>
<item
android:id="@+id/Invite"
android:title="@string/NavInvite"
android:icon="@mipmap/share_nav"
/>
<item
android:id="@+id/Partner"
android:title="@string/NavPartner"
android:icon="@drawable/partner_icon_smaller_version"
/>
<item
android:id="@+id/Sign_out"
android:title="@string/Sign_out"
android:icon="@mipmap/sign_out"
/>
<item
android:id="@+id/About_us"
android:title="@string/about_us"
android:icon="@drawable/info"
/>
</group>
</menu>