Android'in düzenler için yaptığı tüm ölçümlerle gerçekten kafam karıştı. Temel olarak, ortaya konulduktan hemen sonra ortaya konan bir görünümün gerçek hesaplanmış yüksekliğini ve genişliğini elde etmek istiyorum. Hesaplanmış yükseklik ve genişlik elde etmem gerekiyor çünkü Viewpropertyanimator kullanarak açarken hareketlendirmek istediğim gizli bir LinearLayout
var. Animasyondan önce hedef genişliğini (hesaplanan genişlik olan) animatöre vermem gerekiyor. Bu düzenin genişliği dinamiktir, çünkü genişlik için android:weight
parametresine bağlıdır, bu nedenle statik bir değer veremem. getMeasuredHeight() ve width dönen 0 ölçüden sonra()
package com.example.testproject;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
public class TestActivity extends Activity
{
private LinearLayout gmailListContainer, yahooMailListContainer, windowsLiveListContainer;
private LinearLayout emailMessageContainer;
private Display display;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_test);
gmailListContainer = (LinearLayout) this.findViewById(R.id.email_activity_gmail_layout);
yahooMailListContainer = (LinearLayout) this.findViewById(R.id.email_activity_yahoo_mail_layout);
windowsLiveListContainer = (LinearLayout) this.findViewById(R.id.email_activity_windows_live_layout);
emailMessageContainer = (LinearLayout) this.findViewById(R.id.email_activity_email_content_layout);
gmailListContainer.setBackgroundColor(Color.CYAN);
yahooMailListContainer.setBackgroundColor(Color.MAGENTA);
windowsLiveListContainer.setBackgroundColor(Color.GREEN);
emailMessageContainer.setBackgroundColor(Color.RED);
display = getWindowManager().getDefaultDisplay();
setMeasuredDimensions();
}
private void setMeasuredDimensions()
{
View v = this.findViewById(R.id.email_activity_layout);
v.measure(display.getWidth(), display.getHeight());
Log.v("EmailActivity", v.getMeasuredHeight() + ", " +v.getMeasuredWidth());
}
private void setWeight(LinearLayout container, float weight)
{
LinearLayout.LayoutParams params = (LayoutParams) container.getLayoutParams();
params.weight = weight;
container.setLayoutParams(params);
container.setVisibility(View.VISIBLE);
}
}
İşte alakalı düzen kaynak::
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/email_activity_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:baselineAligned="false">
<LinearLayout
android:id="@+id/email_activity_gmail_layout"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<LinearLayout
android:id="@+id/email_activity_yahoo_mail_layout"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<LinearLayout
android:id="@+id/email_activity_windows_live_layout"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<LinearLayout
android:id="@+id/email_activity_email_content_layout"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0"
/>
Önceki yorumumu kazıyın. İşte düzenlenmiş bir tane: Hey orda! Ben senin çözümünü denedim, ve çalışır, ancak ben v.measure (display.getWidth(), display.getHeight()) 'i çağırdığımda, tekrar değerler 0'a dönüyor. önce yükseklik ve genişlik, ekranın yüksekliğini ve genişliğini ve günlüğe kaydedilen yüksekliği ve genişliği yeniden görüntülemede yine bir ölçü komutunu ateşleyin. İlk kayıtta, doğru değerler döndürülür. İkinci kayıtta, değerler 0'a sıfırlandı. Neden bu? – Neilers
Ekranınızın genişliğinin ve yüksekliğinin ne olduğunu kontrol ettiniz mi? Belki 0 kendisi –
Ne yazık ki, 0 değildi. Ayrıca, yanılıyorsam beni düzeltin, ancak bu yaklaşım görüşlerin zaten çizildiğini düşünür. Bulmaya çalıştığım şey, ** 1 için bir yoldur. ** İç doğrusal düzenleri, ilk 3'ün ağırlık = 1 ve 4'ün ağırlık = 0 ** 2 olmasını sağlayacak şekilde ayarlayın. ** Kuvvet düzeni, ölçü veya Bu modda her biri için hesaplanan yükseklik ve ağırlık alabilmem için bir şey ** 3. ** İlk 3 düzenden 2'sinin ağırlık = 1 ve 1 ile ağırlık = 1 olacak şekilde düzenleri ayarlayın ve 4'ün ağırlığı = 2 ** 4. ** bu 2. modda her biri için genişlik ve yükseklik elde edin ** 5. ** Ağırlıkları geri alın ve sadece o zaman görüşlerini çizeceğim – Neilers