在更改方向时,小组件大小会减小

时间:2012-01-11 05:07:32

标签: android layout widget

我创建了一个WiFi Widget。它的大小正在减小,同时将方向从纵向更改为横向。 我正在使用的布局如下。

<?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>

2 个答案:

答案 0 :(得分:2)

如果您希望此布局同时包含纵向和横向,那么您可以在oncreate上编写硬编码,如下所示: - 您需要以横向和纵向方式定义应用程序GUI(只需旋转手机)。

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

  1. 在两种情况下为布局创建两个main.xml文件:landscape和portrait。

  2. 根据类型将这两个main.xml放在资源中:

      

    /res/layout-land/main.xml

         

    /res/layout-port/main.xml

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

    如果您希望检测布局类型更改的时间,并且您希望在编码中执行一些其他工作,您可能需要按照以下步骤操作:

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

    2. 检测方向更改:

    3.   

      @覆盖

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

      Details

      如果您只想要肖像,那么

      AndroidManifest.xml, declare your Activity like so: <activity ...    android:screenOrientation="portrait" .../>
      

      如果您只想要横向广告,那么

       AndroidManifest.xml, declare your Activity like so: <activity ...     android:screenOrientation="landscape" .../>
      

      如果您想了解更多信息,请转到这些链接

      http://developer.android.com/resources/articles/faster-screen-orientation-change.html

      http://developer.android.com/guide/topics/manifest/activity-element.html#screen

      StackOverflow search

答案 1 :(得分:0)

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