java - 如何在此 Framelayout 上添加 onclickListener?
问题描述
这是我的主要活动:
public class MainActivity extends AppCompatActivity {
private LinearLayout mStatusBarAllContents;
private FrameLayout mStatusBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStatusBar = findViewById(R.id.status_bar);
mStatusBarAllContents = findViewById(R.id.status_bar_all_contents);
mStatusBar.setOnClickListener(v -> {
Log.d("TAG", "status");
});
mStatusBarAllContents.setOnClickListener(v -> {
Log.d("TAG", "statusall");
});
}
我的布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/status_bar"
android:layout_width="match_parent"
android:layout_height="60px"
android:background="@drawable/sysheader_bg"
android:descendantFocusability="afterDescendants"
android:orientation="vertical">
<ImageView
android:id="@+id/notification_lights_out"
android:layout_width="22dip"
android:layout_height="match_parent"
android:paddingStart="6dp"
android:paddingBottom="2dip"
android:scaleType="center"
android:visibility="gone"
tools:ignore="RtlCompat" />
<LinearLayout
android:id="@+id/status_bar_all_contents"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<FrameLayout
android:layout_width="174px"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/clock_relativelayout"
android:layout_width="174px"
android:layout_height="match_parent"
android:clickable="true"
android:visibility="visible">
<TextView
android:id="@+id/clock_hour"
android:layout_width="60px"
android:layout_height="54px"
android:gravity="center"
android:includeFontPadding="false"
android:text="05"
android:textColor="@color/white"
android:textSize="52px"
android:textStyle="bold" />
<ImageView
android:id="@+id/clock_coron"
android:layout_width="12px"
android:layout_height="48px"
android:layout_marginTop="9px"
android:layout_toRightOf="@+id/clock_hour"
android:scaleType="fitCenter"
android:src="@drawable/num_12x48_colon" />
<TextView
android:layout_width="60px"
android:layout_height="54px"
android:layout_toRightOf="@+id/clock_coron"
android:gravity="center"
android:includeFontPadding="false"
android:text="30"
android:textColor="@color/white"
android:textSize="52px"
android:textStyle="bold">
</TextView>
</RelativeLayout>
</FrameLayout>
<LinearLayout
android:id="@+id/status_bar_info_layout"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:visibility="visible">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/audio_area"
android:layout_width="786px"
android:layout_height="match_parent"
android:background="@drawable/da_header_sections_background_click_over_info"
android:clickable="true"
android:orientation="horizontal"
android:splitMotionEvents="false">
<FrameLayout
android:id="@+id/audio_info_area"
android:layout_width="708px"
android:layout_height="match_parent"
android:clickable="false">
<TextView
android:id="@+id/audio_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18px"
android:layout_marginLeft="18px"
android:ellipsize="end"
android:gravity="left"
android:singleLine="true"
android:text="ALOLO"
android:textSize="20sp"
android:visibility="visible" />
<LinearLayout
android:id="@+id/audio_off"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="24px"
android:paddingLeft="24px"
android:paddingEnd="56px"
android:paddingRight="56px"
android:visibility="gone">
<TextView
android:id="@+id/audio_off_text"
android:layout_width="648px"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="6px"
android:layout_marginLeft="6px"
android:ellipsize="end"
android:gravity="left"
android:singleLine="true"
android:text="PowerOFF"
android:textColor="@color/white"
android:textSize="30px">
</TextView>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</LinearLayout>
我在 FrameLayout 和 LinearLayout 上设置了 onclick,我想显示日志,status
但是当我触摸它时,什么也没有发生。然后,我设置 android:layout_width="1dp", android:layout_height="1dp" of id: status_bar_all_contents,它显示 log: status
,但 status_bar_all_contents 会消失,所以我不想要那个。那么当我触摸它并显示日志时如何修复status
?Ps:对不起,我的英文不好。
解决方案
布局通常会将点击传递给其子级。您可以在此处尝试此解决方案,禁用所有子 onclicks 并启用 FrameLaoyuts onclicks。但我认为这不适用于LinearLayout。
我的建议将整个视图包装在 aConstraintLayout
和 position 2 basic <View>
s
一个<View>
被约束以匹配FrameLayout
一个<View>
被约束以匹配LinearLayout
这些<View>
s 将充当叠加层。
<View
android:id="@+id/status_bar_overlay"
app:layout_constraintEnd_toEndOf="@id/status_bar"
app:layout_constraintStart_toStartOf="@id/status_bar"
app:layout_constraintTop_toTopOf="@id/status_bar"
app:layout_constraintBottom_toBottomOf="@id/status_bar" />
<View
android:id="@+id/status_bar_all_contents_overlay"
app:layout_constraintEnd_toEndOf="@id/status_bar_all_contents"
app:layout_constraintStart_toStartOf="@id/status_bar_all_contents"
app:layout_constraintTop_toTopOf="@id/status_bar_all_contents"
app:layout_constraintBottom_toBottomOf="@id/status_bar_all_contents" />
设置两个视图onClickListener
,Activity
然后就可以了。
推荐阅读
- python - 组合替换 pandas 列中的字符串
- css - 遍历 jekyll markdon 中的行
- json - jq - 按值排序
- java - 在 Java-8 中生成组合的通用方法
- mysql - 如何在 SQL 查询中设置条件
- c# - 是否有可能(如果可以的话)创建一个可编程的基于节点的流程图(在 Visual Studio 中),就像在 UE4 中那样?
- python - Python 3 在 pdb "b main" 处失败并出现 UnicodeDecodeError?
- c# - 谁序列化/反序列化列表
> 使用 JavaScriptSerializer - reactjs - 在 React 中影响不同组件的状态
- hadoop - 提取 HDFS 文件夹或文件详细信息