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

Posted

技术标签:

【中文标题】如何在 android 上使用代码定位特定布局?【英文标题】:How can i target specific layouts with code on android? 【发布时间】:2017-07-13 08:05:28 【问题描述】:

我正在开发一个应用程序,其中线性布局中的 Imagebutton 源在纵向和横向模式下并不相似。这让我设置了两个可绘制资源文件,一个引用横向,另一个引用 xml 中的纵向。 但是,在我的代码中,我也需要引用这些可绘制资源文件,以便我的小部件响应点击。有没有我可以实现的逻辑来分别引用我的肖像和风景中的图像按钮?

我的纵向模式布局(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_
        android:layout_
        android:background="@drawable/back_main"
        tools:context="com.example.app">
        <ImageView
            android:id="@+id/imageWallpaper"
            android:layout_
            android:layout_
            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_
            android:layout_
            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_
            android:layout_
            android:splitMotionEvents="false"
            android:orientation="horizontal"
            android:weightSum="1"
            android:layout_alignParentBottom="true">

            <ImageButton
                android:id="@+id/audiostreamButton"
                android:onClick="showAudio"
                android:layout_
                android:layout_
                android:layout_weight="0.25"
                android:scaleType="fitXY"
                android:background="@drawable/audio_style"/>

            <ImageButton
                android:id="@+id/eventStreamButton"
                android:onClick="showEvents"
                android:layout_
                android:layout_
                android:layout_weight="0.25"
                android:scaleType="fitXY"
                android:background="@drawable/event_active"/>

            <ImageButton
                android:id="@+id/videoStreamButton"
                android:layout_
                android:layout_
                android:layout_weight="0.25"
                android:scaleType="fitXY"
                android:background="@drawable/video_style" />

            <ImageButton
                android:id="@+id/moreStreamButton"
                android:onClick="showMore"
                android:layout_
                android:layout_
                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_
    android:layout_
    android:background="@drawable/back_land"
    tools:context="com.example.app">

    <ImageView
        android:id="@+id/imageWallpaper"
        android:layout_
        android:layout_
        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_
        android:layout_
        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_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">
    <ImageButton
        android:id="@+id/audioStreamButton"
        android:onClick="showAudio"
        android:layout_
        android:layout_
        android:layout_weight="0.25"
        android:scaleType="fitXY"
        android:background="@drawable/audio_style2"/>

    <ImageButton
        android:id="@+id/eventStreamButton"
        android:onClick="showEvents"
        android:layout_
        android:layout_
        android:layout_weight="0.25"
        android:scaleType="fitXY"
        android:background="@drawable/eventsactive_land"/>

    <ImageButton
        android:id="@+id/videoStreamButton"
        android:layout_
        android:layout_
        android:layout_weight="0.25"
        android:scaleType="fitXY"
        android:background="@drawable/video_style2"/>

    <ImageButton
        android:id="@+id/moreStreamButton"
        android:onClick="showMore"
        android:layout_
        android:layout_
        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);

请帮帮我

【问题讨论】:

参考这些检查***.com/questions/3674933/… 并特别添加您的代码 【参考方案1】:

就像您为 sw360-portsw360-land 创建特定布局一样,您可以为这些版本创建可绘制对象并将它们放置在 drawable-sw360dp-portdrawable-sw360dp-land 文件夹中

【讨论】:

【参考方案2】:

您可以使用 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();


【讨论】:

以上是关于如何在 android 上使用代码定位特定布局?的主要内容,如果未能解决你的问题,请参考以下文章

Android 布局管理器

如何在使用网格布局并将重叠小部件定位到距窗口边框特定距离时重叠 qwidgets?

如何为多个活动全局定义特定布局onclick函数

如何以特定方式在 QMainWindow 上定位多个 QDockWidget

如何在 Xamarin.Forms for android / ios 中实现特定布局

Android - 如何通过代码将图像放置在现有布局之上?