Я ищу макета вроде L Clock:Идеальный круг вокруг TextViews
Более конкретно, 7 писем с кругами вокруг него. Я действительно хочу сделать макет с 7 кругами одинакового размера (на любом устройстве) рядом с другим (по горизонтали).
Что я пытался сделать: Чтобы сделать LinearLayout с ориентацией = горизонтальной. Чтобы сделать «овальную форму» применительно к 7 TextViews внутри этого LinearLayout. Затем я накладываю на каждый TextView вес = 1.
Это не сработало (и я не был уверен, было ли это хорошей идеей, так как я слышал, что мы должны избегать использования «веса»), и я попытался создать пользовательское текстовое представление и переопределить метод onMeasure.
Класс
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(height, height);
}
Layout
<br.com.sibela.testtextviewsamesize.component.RoundTextView
android:layout_margin="10dp"
android:textAlignment="center"
android:layout_weight="1"
android:background="@drawable/circular_textview"
android:text="T"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Форма:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#4488FF" />
</shape>
Теперь мне нужно знать две вещи:
1) Как сделать 7-закругленными круги с одинаковым размером ocup ping всю ширину экрана?
2) Должен ли я действительно избегать использования веса?
UPDATE:
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
tools:context=".MainActivity">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="S" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="M" />
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="T" />
<Button
android:id="@+id/btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="W" />
<Button
android:id="@+id/btn5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="T" />
<Button
android:id="@+id/btn6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="F" />
<Button
android:id="@+id/btn7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/circular_textview"
android:minHeight="1dp"
android:minWidth="1dp"
android:text="S" />
</LinearLayout>
Класс:
package br.com.sibela.testtextviewsamesize;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button btn1;
Button btn2;
Button btn3;
Button btn4;
Button btn5;
Button btn6;
Button btn7;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
btn4 = (Button) findViewById(R.id.btn4);
btn5 = (Button) findViewById(R.id.btn5);
btn6 = (Button) findViewById(R.id.btn6);
btn7 = (Button) findViewById(R.id.btn7);
DisplayMetrics display = this.getResources().getDisplayMetrics();
int width = (display.widthPixels)/7;
btn1.setWidth(width);
btn2.setWidth(width);
btn3.setWidth(width);
btn4.setWidth(width);
btn5.setWidth(width);
btn6.setWidth(width);
btn7.setWidth(width);
btn1.setHeight(width);
btn2.setHeight(width);
btn3.setHeight(width);
btn4.setHeight(width);
btn5.setHeight(width);
btn6.setHeight(width);
btn7.setHeight(width);
}
}
Форма:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#4488FF" />
</shape>
Нет причин, чтобы избежать веса. Используйте его, когда вам это нужно. Просто не кладите вес туда, где он не нужен, и старайтесь избегать вложенных весов, это дорогостоящие вычисления. –
Для остальных определений не получилось. Если вам нужен круг, овальная форма не будет работать, если ширина и высота представления не будут одинаковыми. И если вы используете вес, ширина представления должна быть равна 0dp, а не wrap_content. –
Использование Java позволяет получить ширину экрана пользователя. Затем разделите его на 7 [Общее число TextViews] и установите результирующее значение как Height of TextViews. Таким образом, ширина и высота будут одинаковыми. Также в соответствии с комментарием чуть выше моего, setwidth до 0dp при использовании веса в горизонтальном LinearLayout [И установите Height в 0dp при использовании Vertical LinearLayout]. Также имейте в виду, чтобы учитывать прокладки и поля при поиске высоты на Java. –