SORU
20 Kasım 2011, Pazar


Bir LinearLayout için bir sınır çizmek için nasıl Android:

Üç dosya var. XML, beraberlik ve ana Faaliyet işlev. XML dosyamda bazı LinearLayout var.

 <LinearLayout android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:layout_weight="1">
            <LinearLayout android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:layout_weight="1"
                       android:background="#ef3"
                       android:id="@ id/img01"/>
            <LinearLayout android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:layout_weight="1"
                       android:background="#E8A2B4"
                       android:id="@ id/img02"/>
    </LinearLayout>

Ve, ben çizmek zorunda fonksiyonu.

public class getBorder extends TextView {
    public getBorder(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();

        paint.setColor(android.graphics.Color.RED);

        canvas.drawLine(0, 0, this.getWidth() - 1, 0, paint);
        canvas.drawLine(0, 0, 0, this.getHeight() - 1, paint);
        canvas.drawLine(this.getWidth() - 1, 0, this.getWidth() - 1,
                this.getHeight() - 1, paint);
        canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1,
                this.getHeight() - 1, paint);
    }
}

Ve bu ana faaliyettir.

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final getBorder getBorder = new getBorder(this);
        final LinearLayout img01 = (LinearLayout) findViewById(R.id.img01);
        img01.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                getBorder.setWidth(100);
                getBorder.setHeight(100);
                img01.addView(getBorder);
            }
        });

    }

Program sınır çizebilir ama boyutu LinearLayout uymadı. Ve ben LinearLayout yeniden tıklatın, program ezilmiş. Biri bana yardım edebilir mi? Başka bir şey, iki daire çizin LinearLayout merkezinde istiyorum, ama nasıl anlamaya merkezi koordinatları alabilir miyim?

CEVAP
20 Kasım 2011, Pazar


Gerçekten Program aracılığıyla bunu yapmak zorunda mı?

Sadece Başlığı dikkate alarak: android:... arka plan olarak bir ShapeDrawable kullanabilirsiniz

Örneğin, gibi res/drawable/my_custom_background.xml tanımlayalım:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
  <corners
      android:radius="2dp"
      android:topRightRadius="0dp"
      android:bottomRightRadius="0dp"
      android:bottomLeftRadius="0dp" />
  <stroke
      android:width="1dp"
      android:color="@android:color/white" />
</shape>

ve tanımlamak android:background="@/my_custom_background". drawable

Ama çalışması lazım test ettim.

Güncelleme:

Bu daha iyi, eğer bu sizin ihtiyaçlarınıza uygun eğer xml şekli drawable resource güç kaldıraç bence. "En baştan" projesi (android-8), res/layout/main.xml define . bir ile

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/border"
    android:padding="10dip" >
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, SOnich"
    />
[... more TextView ...]
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, SOnich"
    />
</LinearLayout>

ve bir res/drawable/border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
   <stroke
        android:width="5dip"
        android:color="@android:color/white" />
</shape>

Rapor zencefilli bir cihaz üzerinde çalışmak için. android:width şekil/vuruş değeri LinearLayout android:padding ilişkilendirmek gerekir unutmayın. Lütfen, son uygulama ama bir proje renk tanımlı değil @android:color/white kullanmayın.

Sağlanan örnek gelen LinearLayout her android:background="@drawable/border" android:padding="10dip" uygulamak olabilir.

- Diğer mesajlar ile ilgili görünen bazı çevreler gibi LinearLayout arka plan, oynuyorum ile Daraltma/Ölçek/Katman drawable kaynakları (see Drawable Resources daha fazla bilgi) bir çalışma için görüntü mükemmel daireler arka planda bir LinearLayout ama başarısız oldu şu anda...

Sorununuzu açıkça getBorder.set{Width,Height}(100); kullanımı bulunur. Neden özelliği bir yöntem olarak bunu yapıyorsun?

Daha fazla bilgi nokta kaçırmamak lazım: neden bu program aracılığıyla yapıyorsunuz? Dinamik bir davranış mı ihtiyacınız var? Giriş drawables png veya ShapeDrawable kabul edilebilir mi? vb.

Devam edecek (yarın belki ve ne elde etmek istediğinizi hakkında daha fazla duyarlılıklar verdiğiniz bitmez)...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blunty

    Blunty

    13 Mart 2006
  • GenTechPC

    GenTechPC

    1 Temmuz 2007
  • The Onion

    The Onion

    14 Mart 2006