我正在开发一个应用程序,其中线性布局中的Imagebutton源与portait和landscape模式不相似。这使我设置了两个可绘制的资源文件,一个用于引用横向,另一个用于xml内的纵向。 但是,在我的代码中,我需要引用这些可绘制的资源文件,以便我的小部件响应点击。是否有一个逻辑我可以实现在portait和景观中分别引用我的图像按钮?
我的纵向模式布局(sw360-port)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/back_main"
tools:context="com.example.app">
<ImageView
android:id="@+id/imageWallpaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/audio_wallpaper"
android:visibility="invisible"
android:layout_marginTop="79dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<ImageButton
android:id="@+id/playAudio"
android:onClick="clickAudioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:background="@drawable/playbutton_style"
android:layout_marginTop="28dp"
android:layout_below="@+id/imageWallpaper"
android:layout_centerHorizontal="true" />
<LinearLayout
android:id="@+id/linearView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:splitMotionEvents="false"
android:orientation="horizontal"
android:weightSum="1"
android:layout_alignParentBottom="true">
<ImageButton
android:id="@+id/audioStreamButton"
android:onClick="showAudio"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/audio_style"/>
<ImageButton
android:id="@+id/eventStreamButton"
android:onClick="showEvents"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/event_active"/>
<ImageButton
android:id="@+id/videoStreamButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/video_style" />
<ImageButton
android:id="@+id/moreStreamButton"
android:onClick="showMore"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/more_style"/>
</LinearLayout>
</RelativeLayout>
我的横向模式布局(sw360-land)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/back_land"
tools:context="com.example.app">
<ImageView
android:id="@+id/imageWallpaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/wallpaper_land"
android:visibility="invisible"
android:paddingBottom="30dp"
android:layout_marginTop="76dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="66dp"
android:layout_marginEnd="66dp" />
<ImageButton
android:id="@+id/playAudio"
android:onClick="clickAudioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:paddingLeft="70dp"
android:background="@drawable/playbutton_style"
android:layout_centerInParent="true"
android:layout_below="@+id/imageWallpaper"/>
<LinearLayout
android:id="@+id/linearView"
android:orientation="vertical"
android:weightSum="1"
android:layout_width="match_parent"
android:layout_height="280dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<ImageButton
android:id="@+id/audioStreamButton"
android:onClick="showAudio"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/audio_style2"/>
<ImageButton
android:id="@+id/eventStreamButton"
android:onClick="showEvents"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/eventsactive_land"/>
<ImageButton
android:id="@+id/videoStreamButton"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/video_style2"/>
<ImageButton
android:id="@+id/moreStreamButton"
android:onClick="showMore"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.25"
android:scaleType="fitXY"
android:background="@drawable/more_style2" />
</LinearLayout>
</RelativeLayout>
我的代码:
public void showEvents(View view) {
if(!eventButtonClicked ) {
eventWindowButton.setImageResource(R.drawable.event_active);
audioWindowButton.setImageResource(R.drawable.audio_style);
moreWindowButton.setImageResource(R.drawable.more_style);
listView.setVisibility(View.VISIBLE);
imageViewAudio.setVisibility(View.INVISIBLE);
playAudioButton.setVisibility(View.INVISIBLE);
eventButtonClicked = true;
audioButtonClicked = false;
} else {
eventButtonClicked = false;
}
}
public void clickAudioButton(View view) {
if (boundToAudioService) {
boundToAudioService = false;
playAudioButton.setImageResource(R.drawable.stopbutton_style);
audioService.play();
} else {
playAudioButton.setImageResource(R.drawable.playbutton_style);
audioService.pause();
boundToAudioService = true;
}
}
public void showAudio(View view) {
if (!audioButtonClicked) {
audioButtonClicked = true;
eventButtonClicked = false;
audioWindowButton.setImageResource(R.drawable.audio_active);
eventWindowButton.setImageResource(R.drawable.event_style);
moreWindowButton.setImageResource(R.drawable.more_style);
listView.setVisibility(View.INVISIBLE);
imageViewAudio.setVisibility(View.VISIBLE);
playAudioButton.setVisibility(View.VISIBLE);
} else {
audioButtonClicked = false;
}
}
如您所见,我需要为我的横向布局设置图像资源,例如
eventWindowButton.setImageResource(R.drawable.event_active2); videoWindowButton.setImageResource(R.drawable.video_active2);
请帮帮我
答案 0 :(得分:0)
就像您为sw360-port
和sw360-land
创建了特定布局一样,您可以为这些版本创建drawable,并将它们放在drawable-sw360dp-port
和drawable-sw360dp-land
文件夹中
答案 1 :(得分:0)
您可以使用onConfigurationChanged了解设备的当前方向,并根据您可以做您想做的事情。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}