2012-01-11 41 views
1

我已经创建了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

如果你想要这个布局纵向和横向那么你就写硬编码在OnCreate中是这样的: - 会有你需要定义无论是在横向和纵向应用程序GUI时间(只需旋转手机) 。

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

  1. 在两种情况下创建两个main.xml文件:横向和纵向。

  2. 根据其类型把那两个的main.xml资源:

    /res/layout-land/main.xml

    /res/layout-port/main.xml

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

在的情况下,要检测的时机时布局类型变化,你想做的事在编码一些额外的工作,你可能会想请按照下列步骤操作:

  1. 添加机器人:configChanges =”方向”到AndroidManifest。XML

  2. 检测取向变化:

@覆盖

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

+0

不是有两个布局,一个纵向和一个横向的,你可以有一个parameterzied布局(如控制pading或其他属性),并分别从res/values和res/values-land中获取参数。这样你就不需要重复这两种布局的普通aspeptcs。 – user1076637 2012-01-11 07:14:42

0

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