Java Android可扩展菜单项

Java Android可扩展菜单项,java,android,Java,Android,我试图设计一个菜单,你可以在其中连接你的社交媒体帐户与我的应用程序。为此,我需要一个菜单,列出所有可访问的社交媒体应用程序。 例如: 推特 脸谱网 Youtube 等等 要连接到您的帐户,您可以单击其中一个菜单项,并显示一个单独的“内容”。我发现了一种类似于charm的方法,但会产生大量代码,如图所示: // Twitter btn_login_twitter = view.findViewById(R.id.twitter_login_btn); img_ca_twitt

我试图设计一个菜单,你可以在其中连接你的社交媒体帐户与我的应用程序。为此,我需要一个菜单,列出所有可访问的社交媒体应用程序。 例如:

  • 推特
  • 脸谱网
  • Youtube
  • 等等
要连接到您的帐户,您可以单击其中一个菜单项,并显示一个单独的“内容”。我发现了一种类似于charm的方法,但会产生大量代码,如图所示:

 // Twitter
    btn_login_twitter = view.findViewById(R.id.twitter_login_btn);
    img_ca_twitter_expand = view.findViewById(R.id.ca_twitter_expand);
    fl_ca_twitter_content = view.findViewById(R.id.ca_twitter_content_layout);
    fl_ca_twitter_header = view.findViewById(R.id.ca_twitter_header);
    fl_ca_twitter_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (fl_ca_twitter_content.getVisibility()== View.VISIBLE) fl_ca_twitter_content.setVisibility(View.GONE);
            else fl_ca_twitter_content.setVisibility(View.VISIBLE);
            img_ca_twitter_expand.animate().rotation(img_ca_twitter_expand.getRotation() == 0 ? 180 : 0).setDuration(500).start();
        }
    });
    // Facebook
    btn_login_facebook = view.findViewById(R.id.facebook_login_btn);
    fl_ca_facebook_content = view.findViewById(R.id.ca_facebook_content_layout);
    img_ca_facebook_expand = view.findViewById(R.id.ca_facebook_expand);
    fl_ca_facebook_header = view.findViewById(R.id.ca_facebook_header);
    fl_ca_facebook_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (fl_ca_facebook_content.getVisibility() == View.VISIBLE) fl_ca_facebook_content.setVisibility(View.GONE);
            else fl_ca_facebook_content.setVisibility(View.VISIBLE);
            img_ca_facebook_expand.animate().rotation(img_ca_facebook_expand.getRotation() == 0 ? 180 : 0).setDuration(500).start();


        }
    });

    //Youtube
    fl_ca_youtube_content = view.findViewById(R.id.ca_youtube_content_layout);
    fl_ca_youtube_header = view.findViewById(R.id.ca_youtube_header);
    img_ca_youtube_expand = view.findViewById(R.id.ca_youtube_expand);
    fl_ca_youtube_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (fl_ca_youtube_content.getVisibility() == View.VISIBLE) fl_ca_youtube_content.setVisibility(View.GONE);
            else fl_ca_youtube_content.setVisibility(View.VISIBLE);
            img_ca_youtube_expand.animate().rotation(img_ca_youtube_expand.getRotation() == 0 ? 180 : 0).setDuration(500).start();


        }
    });
正如您在这里看到的,每个应用程序的代码几乎相同。只有属性的名称会随着应用程序的更改而更改。 下面是一个屏幕截图,显示了它现在的样子

xml文件中存在相同的问题:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ca_scrollview_layout"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/ca_twitter_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/about_twitter_color"
        android:outlineProvider="bounds">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|center_horizontal"
            android:text="Twitter"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

        <ImageView
            android:id="@+id/ca_twitter_expand"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            app:srcCompat="@drawable/baseline_keyboard_arrow_down_black_48" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ca_twitter_content_layout"
        android:visibility="gone">
        <include layout="@layout/connect_twitter_layout" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/ca_facebook_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/about_facebook_color">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|center_horizontal"
            android:text="Facebook"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:id="@+id/ca_facebook_expand"
            app:srcCompat="@drawable/baseline_keyboard_arrow_down_black_48" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ca_facebook_content_layout"
        android:visibility="gone">
        <include layout="@layout/connect_facebook_layout" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/ca_youtube_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/about_youtube_color">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical|center_horizontal"
            android:text="Youtube"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

        <ImageView
            android:id="@+id/ca_youtube_expand"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            app:srcCompat="@drawable/baseline_keyboard_arrow_down_black_48" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ca_youtube_content_layout"
        android:visibility="gone">
        <include layout="@layout/connect_youtube_layout" />
    </FrameLayout>




</LinearLayout>


有更好的办法解决我的问题吗?我觉得这个不太好

您可以通过为可单击的项目提供一个OnClickListener来改进代码。请看一下这个,以获得详细的解释