Размер виджета уменьшается при изменении ориентации - PullRequest
1 голос
/ 11 января 2012

Я создал виджет 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>

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Если вам нужен этот макет как Portrait, так и Landscape , тогда вы создадите жесткий код при его создании следующим образом: - Будет время, когда вам потребуется определить графический интерфейс приложения как в альбомной, так и в портретной ориентации (просто повернитетелефон).

К счастью, у каждого дроида есть встроенная функция определения типа макета.Вам нужно реализовать:

  1. Создать два файла main.xml для макета в обоих случаях: альбомный и портретный.

  2. Поместите эти дваmain.xml в ресурсах в соответствии с его типом:

    / res / layout-land / main.xml

    / res / layout-port / main.xml

Просто создайте и попробуйте графический интерфейс вашего приложения во время выполнения.

В случае, если вы хотите определить время, когда меняется тип макета, и вы хотите выполнить некоторые дополнительные работы в кодировании,Возможно, вы захотите выполнить следующие действия:

  1. Добавить Android: configChanges = «direction» в 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

  }   }

Подробности

Если вы хотите только портрет, то

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 голосов
/ 11 января 2012

Когда изменяется ориентация экрана, он снова запускается из onCreate (). Таким образом, вы можете проверить текущую ориентацию экрана в onCreate (), а затем динамически установить высоту и ширину вашего вида. сохраняйте свой xml-код, поскольку он только динамически задает ширину высоты вашего вида, когда он находится в landsacpe.

...