如何使用android上的代码来定位特定布局?

时间:2017-07-13 08:05:28

标签: java android

我正在开发一个应用程序,其中线性布局中的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);

请帮帮我

2 个答案:

答案 0 :(得分:0)

就像您为sw360-portsw360-land创建了特定布局一样,您可以为这些版本创建drawable,并将它们放在drawable-sw360dp-portdrawable-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();
}
}