我正在尝试设计一个菜单,您可以在其中将社交媒体帐户与我的应用相关联。为此,我想要一个菜单列出所有可访问的社交媒体应用程序。 例如:
要连接到您的帐户,您可以点击其中一个菜单项,并显示个别“内容”。我找到了一种类似于魅力的方法,但会产生巨大的代码重载,如下所示:
// 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>
有没有更好的方法来解决我的问题?我觉得这个不太好。