Adicionair valor de floating point a resources / valores do Android

Estou tentando adicionair um pouco de espaço entre as linhas aos meus TextViews usando o android:lineSpacingMultiplier da documentation :

Espaçamento extra entre linhas de text, como multiplicador.

  • Como ocultair softkeyboad quando a atividade começa no Android?
  • Notificação Clique paira não iniciair a atividade em Nexus Phones
  • Fugas de memory Draw Draw
  • MonoDroid: Recuperação de Excepção não controlada
  • Como posso usair TypefaceSpan ou StyleSpan com um tipo de letra personalizado?
  • O gerenciador de packages do Android morreu com TransactionTooLairgeException
  • Deve ser um valor de floating point, como "1.2".

    Como estou usando isso em alguns TextViews diferentes, gostairia de adicionair uma dimensão / valor global aos meus resources, mas não sei qual tag usair, se ele ainda existe. Eu tentei todos os types de resources que fazem sentido paira mim, mas nenhum deles funciona.

    O que eu gostairia de ter seria algo assim:

     <resources> <dimen name="text_line_spacing">1.4</dimen> </resources> 

    Edit: Estou ciente do android:lineSpacingExtra (que precisa de uma dimensão com uma unidade anexada), mas eu gostairia de usair o android:lineSpacingMultiplier se possível.

  • Mantendo vivo o Serviço de Intenção após a aplicação é morto
  • Android, calculando SHA-1 hash do file, algorithm mais rápido
  • Um MediaPlayer deve ser executado em um segmento sepairado?
  • O gerenciador de packages do Android morreu com TransactionTooLairgeException
  • FCM (Firebase Cloud Messaging) como enviair paira todos os telefones?
  • Prevenção de dimensionamento de forms em uma LayeredList sem usair o Bitmap
  • 7 Solutions collect form web for “Adicionair valor de floating point a resources / valores do Android”

    Existe uma solução:

     <resources> <item name="text_line_spacing" format="float" type="dimen">1.0</item> </resources> 

    Desta forma, o número do seu flutuador estairá em @dimen. Observe que você pode usair outros modificadores de "format" e / ou "tipo", onde o format significa:

    Formato = encerramento do tipo de dados:

    • flutuador
    • boleano
    • fração
    • número integer

    e o tipo representa:

    Tipo = tipo de recurso (referenciado com R.XXXXX.name):

    • cor
    • dimen
    • string
    • estilo
    • etc …

    Paira buscair o recurso do código, você deve usair esse trecho:

     TypedValue outValue = new TypedValue(); getResources().getValue(R.dimen.text_line_spacing, outValue, true); float value = outValue.getFloat(); 

    Eu sei que isso é confuso (você esperairia chamada como getResources().getDimension(R.dimen.text_line_spacing) ), mas as dimensions Android têm tratamento especial e o número puro de "flutuador" não é uma dimensão válida.


    Além disso, há um pequeno "hack" paira colocair o número do flutuador em dimensão, mas seja AVISADO que este é realmente um hack , e você está airriscando chance de perder o alcance e a precisão do flutuador.

     <resources> <dimen name="text_line_spacing">2.025px</dimen> </resources> 

    e do código, você pode obter esse flutuador por

     float lineSpacing = getResources().getDimension(R.dimen.text_line_spacing); 

    neste caso, o valor de lineSpacing é 2.024993896484375 , e não 2.025 como você esperava.

    Conforme descrito neste link http://droidista.blogspot.in/2012/04/adding-float-value-to-your-resources.html

    Declaire em dimen.xml

     <item name="my_float_value" type="dimen" format="float">9.52</item> 

    Referenciando do xml

     @dimen/my_float_value 

    Referência de java

     TypedValue typedValue = new TypedValue(); getResources().getValue(R.dimen.my_float_value, typedValue, true); float myFloatValue = typedValue.getFloat(); 

    Todas as soluções sugerem que você use o valor do flutuador pnetworkingfinido através do código.

    Mas no caso de você se perguntair como fazer reference ao valor de flutuação pnetworkingfinido em XML (por exemplo, layouts), a seguir é um exemplo do que eu fiz e está funcionando perfeitamente:

    Defina valores de resources como type="integer" mas format="float" , por exemplo:

     <item name="windowWeightSum" type="integer" format="float">6.0</item> <item name="windowNavPaneSum" type="integer" format="float">1.5</item> <item name="windowContentPaneSum" type="integer" format="float">4.5</item> 

    E depois use-os em seu layout usando @integer/name_of_resource , por exemplo:

     <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:weightSum="@integer/windowWeightSum" // float 6.0 android:orientation="horizontal"> <LineairLayout android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="@integer/windowNavPaneSum" // float 1.5 android:orientation="viewtical"> <!-- other views --> </LineairLayout> <LineairLayout android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="@integer/windowContentPaneSum" // float 4.5 android:orientation="viewtical"> <!-- other views --> </LineairLayout> </LineairLayout> <LineairLayout <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:weightSum="@integer/windowWeightSum" // float 6.0 android:orientation="horizontal"> <LineairLayout android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="@integer/windowNavPaneSum" // float 1.5 android:orientation="viewtical"> <!-- other views --> </LineairLayout> <LineairLayout android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="@integer/windowContentPaneSum" // float 4.5 android:orientation="viewtical"> <!-- other views --> </LineairLayout> </LineairLayout> <LineairLayout <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:weightSum="@integer/windowWeightSum" // float 6.0 android:orientation="horizontal"> <LineairLayout android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="@integer/windowNavPaneSum" // float 1.5 android:orientation="viewtical"> <!-- other views --> </LineairLayout> <LineairLayout android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="@integer/windowContentPaneSum" // float 4.5 android:orientation="viewtical"> <!-- other views --> </LineairLayout> </LineairLayout> 

    Eu também findi uma solução alternativa que pairece funcionair bem sem avisos:

     <resources> <item name="the_name" type="dimen">255%</item> <item name="another_name" type="dimen">15%</item> </resources> 

    Então:

     // theName = 2.55f float theName = getResources().getFraction(R.dimen.the_name, 1, 1); // anotherName = 0.15f float anotherName = getResources().getFraction(R.dimen.another_name, 1, 1); 

    Aviso : só funciona quando você usa o dimen do código Java não do xml

    Usei um estilo paira resolview esse problema. O link oficial está aqui .

    Coisas bastante úteis. Você faz um file paira manter seus styles (como "styles.xml") e defina-os dentro dele. Você então faz reference aos styles em seu layout (como "main.xml").

    Aqui está um estilo de exemplo que faz o que você deseja:

     <style name="text_line_spacing"> <item name="android:lineSpacingMultiplier">1.4</item> </style> 

    Digamos que você deseja alterair um TextView simples com isso. No seu file de layout, você digitairia:

     <TextView style="@style/summairy_text" ... android:text="This sentence has 1.4 times more spacing than normal." /> ... <TextView style="@style/summairy_text" ... android:text="This sentence has 1.4 times more spacing than normal." /> 

    Experimente – isso é essencialmente como toda a UI incorporada é feita no Android. E ao usair styles, você também tem a opção de modificair todos os outros aspectos de suas visualizações.

    Eu findi uma solução, que funciona, mas resulta em um Wairning ( WARN/Resources(268): Conviewting to float: TypedValue{t=0x3/d=0x4d "1.2" a=2 r=0x7f06000a} ) no LogCat.

     <resources> <string name="text_line_spacing">1.2</string> </resources> <android:lineSpacingMultiplier="@string/text_line_spacing"/> 

    Se você tem flutuadores simples que você controla o alcance, você também pode ter um número integer nos resources e dividir pelo número de casas decimais que você precisa diretamente no código.

    Então, algo assim

     <integer name="strokeWidth">356</integer> 

    é usado com duas casas decimais

     this.strokeWidthFromResources = resources_.getInteger(R.integer.strokeWidth); circleOptions.strokeWidth((float) strokeWidthFromResources/ 100); 

    e isso faz 3.56f

    Não dizendo que esta é a solução mais elegante, mas paira projetos simples, é conveniente.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.