Android 小部件大小在更改方向时减小

Android 小部件大小在更改方向时减小,android,layout,widget,Android,Layout,Widget,我已经创建了一个WiFi小部件。当方向从纵向更改为横向时,其大小正在减小。 我使用的布局如下所示 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > &l

我已经创建了一个WiFi小部件。当方向从纵向更改为横向时,其大小正在减小。 我使用的布局如下所示

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" >

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_gravity="center" >

<ImageView
    android:id="@+id/wifi_background"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    />

<!--<TextView
    android:id="@+id/wifi_status"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:layout_marginTop="5dip"
    android:layout_marginLeft="35dip"
    android:layout_gravity="center_horizontal" />

 -->
</LinearLayout>
 <TextView
    android:id="@+id/wifi_off"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="15dip"
    android:layout_marginLeft="25dip"
    android:textColor="@android:color/white"
    android:textSize="15dip"
     />
<TextView
    android:id="@+id/wifi_notconnected"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:layout_marginTop="43dip"
    android:layout_marginLeft="35dip"
    android:layout_gravity="center_horizontal"
    android:textSize="14dip" />
 <TextView
    android:id="@+id/wifi_connecting"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:layout_marginTop="8dip"
    android:layout_marginLeft="33dip"
    android:layout_gravity="center_horizontal"
    android:textSize="14dip" />
<TextView
    android:id="@+id/wifi_obtaining"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dip"
    android:layout_marginLeft="40dip"
    android:textColor="@android:color/white"
    android:textSize="10dip"
    />
 <TextView
    android:id="@+id/wifi_on"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dip"
    android:layout_marginLeft="40dip"
    android:textColor="@android:color/white"
    android:textSize="10dip"
     />

<ImageView
    android:id="@+id/wifi_signal_strength"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<FrameLayout android:layout_width="wrap_content"
  android:layout_height="wrap_content">

<RelativeLayout 
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" 
    android:layout_marginTop="5dip">

 <ImageView
    android:id="@+id/wifi_circle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/onpress_network_info_null"
    android:src="@drawable/toggle"
    />

   <ImageView
        android:layout_alignRight="@+id/wifi_circle"
        android:id="@+id/wifi_square"
        android:layout_width="85dip"
        android:layout_height="60dip" 
        android:background="@drawable/network_info_null"
        android:src="@drawable/togglenetwork"/>

     </RelativeLayout>
    </FrameLayout>
 </FrameLayout>


当屏幕方向改变时,它将再次从onCreate()开始。因此,您可以在onCreate()中检查屏幕的当前方向,然后动态设置视图的高度和宽度。保留xml代码,因为它仅在landsacpe中动态设置视图的高度和宽度

如果您想同时使用纵向和横向布局则可以在oncreate上编写硬代码,如下所示:- 有时您需要在横向和纵向(只需旋转手机)中定义应用程序GUI

幸运的是,每个机器人都有检测布局类型的内置功能。您需要实施的是:

  • 在两种情况下为布局创建两个main.xml文件:横向和纵向

  • 根据其类型将这两个main.xml放在参考资料中:

    /res/layout land/main.xml

    /res/layout port/main.xml

  • 只需在运行时构建并尝试应用程序GUI

    如果您想检测布局类型更改时的计时,并想在编码中做一些额外的工作,您可能需要遵循以下步骤:

  • 将android:configChanges=“orientation”添加到AndroidManifest.xml

  • 检测方向变化:

  • @凌驾

    public void onConfigurationChanged(Configuration newConfig) {
      Configuration c = getResources().getConfiguration();
    
      if(c.orientation == Configuration.ORIENTATION_PORTRAIT ) {
        // portrait
    
      } else if(c.orientation == Configuration.ORIENTATION_LANDSCAPE ){
        // landscape
    
      }   }
    

    如果您只想要肖像,那么

    AndroidManifest.xml,像这样声明您的活动:


    您可以使用单个参数化布局(例如,控制焊盘或其他属性),分别从res/values和res/values land获取参数,而不是两个布局,一个用于纵向布局,一个用于横向布局。这样,您就不需要重复这两个布局的公共方面。
    AndroidManifest.xml, declare your Activity like so: <activity ...    android:screenOrientation="portrait" .../>
    
     AndroidManifest.xml, declare your Activity like so: <activity ...     android:screenOrientation="landscape" .../>