Как мне установить стиль textView программно?

Одно из возможных решений в ответе Холдена, и вот некоторые другие решения:

Использование RDD:

Вы можете использовать преобразование sampleByKeyExact из PairRDDFunctions .

sampleByKeyExact (boolean withReplacement, scala.collection.Map фракции, длинные семплы) Возвращает подмножество этого RDD, взятого с помощью ключа (через стратифицированную выборку), содержащего точно math.ceil (numItems * samplingRate) для каждой страты (группа пар с одним и тем же ключом).

blockquote>

И так я буду делать:

Учитывая следующий список:

val seq = Seq(
                (2147481832,23355149,1),(2147481832,973010692,1),(2147481832,2134870842,1),(2147481832,541023347,1),
                (2147481832,1682206630,1),(2147481832,1138211459,1),(2147481832,852202566,1),(2147481832,201375938,1),
                (2147481832,486538879,1),(2147481832,919187908,1),(214748183,919187908,1),(214748183,91187908,1)
           )

Я создал пару RDD, отображая всех пользователей как клавиши:

val data = sc.parallelize(seq).map(x => (x._1,(x._2,x._3)))

Затем я настрою fractions для каждой клавиши следующим образом, поскольку sampleByKeyExact принимает карту дробей для каждой клавиши:

val fractions = data.map(_._1).distinct.map(x => (x,0.8)).collectAsMap

То, что я здесь сделал, - это сопоставление ключей для поиска разных ключей, а затем сопоставление каждой части с долей равно 0.8. Я собираю все как карту.

Образец сейчас:

import org.apache.spark.rdd.PairRDDFunctions
val sampleData = data.sampleByKeyExact(false, fractions, 2L)

или

val sampleData = data.sampleByKeyExact(withReplacement = false, fractions = fractions,seed = 2L)

Вы можете проверить количество на ваших ключах или данных или образец данных:

scala > data.count
// [...]
// res10: Long = 12

scala > sampleData.count
// [...]
// res11: Long = 10

Использование DataFrames:

Рассмотрим те же данные (seq) из предыдущего раздела.

val df = seq.toDF("keyColumn","value1","value2")
df.show
// +----------+----------+------+
// | keyColumn|    value1|value2|
// +----------+----------+------+
// |2147481832|  23355149|     1|
// |2147481832| 973010692|     1|
// |2147481832|2134870842|     1|
// |2147481832| 541023347|     1|
// |2147481832|1682206630|     1|
// |2147481832|1138211459|     1|
// |2147481832| 852202566|     1|
// |2147481832| 201375938|     1|
// |2147481832| 486538879|     1|
// |2147481832| 919187908|     1|
// | 214748183| 919187908|     1|
// | 214748183|  91187908|     1|
// +----------+----------+------+

Мы вам понадобится базовый RDD, чтобы сделать это, на котором мы создаем кортежи элементов в этом RDD, определяя наш ключ как первый столбец:

val data: RDD[(Int, Row)] = df.rdd.keyBy(_.getInt(0))
val fractions: Map[Int, Double] = data.map(_._1)
                                      .distinct
                                      .map(x => (x, 0.8))
                                      .collectAsMap

val sampleData: RDD[Row] = data.sampleByKeyExact(withReplacement = false, fractions, 2L)
                               .values

val sampleDataDF: DataFrame = spark.createDataFrame(sampleData, df.schema) // you can use sqlContext.createDataFrame(...) instead for spark 1.6)

Теперь вы можете проверить количество ваши ключи или df или образец данных:

scala > df.count
// [...]
// res9: Long = 12

scala > sampleDataDF.count
// [...]
// res10: Long = 10

Начиная с Spark 1.5.0 вы можете использовать метод DataFrameStatFunctions.sampleBy:

df.stat.sampleBy("keyColumn", fractions, seed)

29
задан Cœur 10 September 2017 в 05:39
поделиться

7 ответов

Вы не можете программно установить стиль просмотра, но вы можете сделать что-то вроде textView.setTextAppearance(context, android.R.style.TextAppearance_Small);.

49
ответ дан Matt 10 September 2017 в 05:39
поделиться

Попробуйте

textview.setTextAppearance(context, R.style.yourstyle);

. Это может не сработать. Попробуйте создать xml с таким textview

textviewstyle.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="@android:style/TextAppearance.DeviceDefault.Small" />

.

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvstyle, null);
5
ответ дан Pragnani 10 September 2017 в 05:39
поделиться

На самом деле, это возможно на уровне API 21.

TextView имеет конструктор 4 параметров :

TextView (Context context, 
          AttributeSet attrs, 
          int defStyleAttr, 
          int defStyleRes)

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

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style);
6
ответ дан John Rattz 10 September 2017 в 05:39
поделиться

В настоящее время невозможно установить стиль просмотра программно.

Чтобы обойти это, вы можете создать XML-файл макета шаблона с назначенным стилем, например, в res/layout создать tvtemplate.xml со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is a template"
        style="@android:style/TextAppearance.DeviceDefault.Small" />

, а затем надуть это для создания экземпляра вашего нового TextView:

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
28
ответ дан Raghav Sood 10 September 2017 в 05:39
поделиться

Compat версия (из-за устаревания в API 23):

TextViewCompat.setTextAppearance(textView, android.R.style.TextAppearance_DeviceDefault_Small);
4
ответ дан shmakova 10 September 2017 в 05:39
поделиться

Для представлений, сгенерированных во время выполнения (в коде), вы можете передать стиль конструктору: View (Context, AttributeSet, int)

В другом случае вы должны вызывать методы varios для изменить внешний вид

1
ответ дан rds 10 September 2017 в 05:39
поделиться
@Deprecated
public void setTextAppearance(Context context, @StyleRes int resId)

этот метод устарел с Android SDK 23.

Вы можете использовать безопасную версию:

if (Build.VERSION.SDK_INT < 23) {
    super.setTextAppearance(context, resId);
} else {
    super.setTextAppearance(resId);
}
0
ответ дан Robert Grabiński 10 September 2017 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: