【问题标题】:How to add onclickListener on this Framelayout?如何在此 Framelayout 上添加 onclickListener?
【发布时间】:2021-05-28 12:17:04
【问题描述】:

这是我的 MainActivity:

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,它显示日志:status,但 status_bar_all_contents 会消失,所以我不想要那个。 那么当我触摸它并显示日志status时如何修复? Ps:对不起,我的英文不好。

【问题讨论】:

    标签: java android


    【解决方案1】:

    布局通常会将点击传递给其子级。 您可以在此处尝试此解决方案,禁用所有子 onclicks 并启用 FrameLaoyuts onclicks。但我认为这不适用于 LinearLayout。

    Android frame layout click listener not working

    我的建议是将整个视图包含在 ConstraintLayout 中,并将位置 2 基本 &lt;View&gt;s

    一个&lt;View&gt; 被限制为与FrameLayout 匹配

    一个&lt;View&gt; 被限制为与LinearLayout 匹配

    这些&lt;View&gt;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" />
    

    Activity 中设置两个视图的onClickListener 就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多