├── README.md └── SpacingTextView ├── .gradle └── 2.8 │ └── taskArtifacts │ ├── cache.properties │ ├── cache.properties.lock │ ├── fileHashes.bin │ ├── fileSnapshots.bin │ ├── outputFileStates.bin │ └── taskArtifacts.bin ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── libraries │ ├── animated_vector_drawable_23_2_0.xml │ ├── appcompat_v7_23_2_0.xml │ ├── design_23_2_0.xml │ ├── hamcrest_core_1_3.xml │ ├── junit_4_12.xml │ ├── recyclerview_v7_23_2_0.xml │ ├── support_annotations_23_2_0.xml │ ├── support_v4_23_2_0.xml │ └── support_vector_drawable_23_2_0.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── workspace.xml ├── SpacingTextView.iml ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── woyou │ │ └── spacingtextview │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── woyou │ │ │ └── spacingtextview │ │ │ ├── MainActivity.java │ │ │ └── SpacingTextView.java │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ └── content_main.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── woyou │ └── spacingtextview │ └── ExampleUnitTest.java ├── build.gradle ├── build ├── generated │ └── mockable-android-23.jar └── intermediates │ └── dex-cache │ └── cache.xml ├── device-2016-03-07-171918.png ├── device-2016-03-10-102351.png ├── device-2016-03-10-112558.png ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle /README.md: -------------------------------------------------------------------------------- 1 | 2 | # SpacingTextView 3 | 字距为任何字符串的TextView,设置文本间距 4 | 关于我,欢迎关注~ 5 | [我的博客](http://blog.csdn.net/u011974987) 6 | * 项目描述: 7 | 字距为任何字符串的TextView,设置文本间距,在网上找了许多方法都不可行,就弄个笔记记录下来,方便以后使用。放在[GitHub](https://github.com/git-xuhao) 上面了。 8 | 9 | * 本Demo效果截图示例如下: 10 | 11 | ![](https://github.com/git-xuhao/SpacingTextView/blob/master/SpacingTextView/device-2016-03-07-171918.png) 12 | 13 | 核心代码: 14 | --------- 15 | 16 | ```Java 17 | package com.woyou.spacingtextview; 18 | 19 | import android.content.Context; 20 | import android.text.Spannable; 21 | import android.text.SpannableString; 22 | import android.text.style.ScaleXSpan; 23 | import android.util.AttributeSet; 24 | import android.widget.TextView; 25 | 26 | /** 27 | * Created by Xiho on 2016/3/7. 28 | */ 29 | public class SpacingTextView extends TextView{ 30 | private float letterSpacing = LetterSpacing.BIGGEST; 31 | private CharSequence originalText = ""; 32 | 33 | 34 | public SpacingTextView(Context context) { 35 | super(context); 36 | } 37 | 38 | public SpacingTextView(Context context, AttributeSet attrs){ 39 | super(context, attrs); 40 | originalText = super.getText(); 41 | applyLetterSpacing(); 42 | this.invalidate(); 43 | } 44 | 45 | public SpacingTextView(Context context, AttributeSet attrs, int defStyle){ 46 | super(context, attrs, defStyle); 47 | } 48 | 49 | public float getLetterSpacing() { 50 | return letterSpacing; 51 | } 52 | 53 | public void setLetterSpacing(float letterSpacing) { 54 | this.letterSpacing = letterSpacing; 55 | applyLetterSpacing(); 56 | } 57 | 58 | @Override 59 | public void setText(CharSequence text, BufferType type) { 60 | originalText = text; 61 | applyLetterSpacing(); 62 | } 63 | 64 | @Override 65 | public CharSequence getText() { 66 | return originalText; 67 | } 68 | 69 | /** 70 | * 字距为任何字符串(技术上,一个简单的方法为CharSequence不使用)的TextView 71 | */ 72 | private void applyLetterSpacing() { 73 | if (this == null || this.originalText == null) return; 74 | StringBuilder builder = new StringBuilder(); 75 | for(int i = 0; i < originalText.length(); i++) { 76 | String c = ""+ originalText.charAt(i); 77 | builder.append(c.toLowerCase()); 78 | if(i+1 < originalText.length()) { 79 | builder.append("\u00A0"); 80 | } 81 | } 82 | SpannableString finalText = new SpannableString(builder.toString()); 83 | if(builder.toString().length() > 1) { 84 | for(int i = 1; i < builder.toString().length(); i+=2) { 85 | finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 86 | } 87 | } 88 | super.setText(finalText, BufferType.SPANNABLE); 89 | } 90 | 91 | public class LetterSpacing { 92 | public final static float NORMAL = 0; 93 | public final static float NORMALBIG = (float)0.025; 94 | public final static float BIG = (float)0.05; 95 | public final static float BIGGEST = (float)0.2; 96 | } 97 | } 98 | 99 | 100 | ``` 101 | 102 | # License 103 | 104 | Copyright 2016 Xuhao 105 | 106 | Licensed under the Apache License, Version 2.0 (the "License"); 107 | you may not use this file except in compliance with the License. 108 | You may obtain a copy of the License at 109 | 110 | http://www.apache.org/licenses/LICENSE-2.0 111 | 112 | Unless required by applicable law or agreed to in writing, software 113 | distributed under the License is distributed on an "AS IS" BASIS, 114 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 115 | See the License for the specific language governing permissions and 116 | limitations under the License. 117 | 118 | ##Thanks! 119 | 120 | *[SpacingTextView](https://github.com/git-xuhao/SpacingTextView) 121 | 122 | -------------------------------------------------------------------------------- /SpacingTextView/.gradle/2.8/taskArtifacts/cache.properties: -------------------------------------------------------------------------------- 1 | #Mon Mar 07 16:52:54 CST 2016 2 | -------------------------------------------------------------------------------- /SpacingTextView/.gradle/2.8/taskArtifacts/cache.properties.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/.gradle/2.8/taskArtifacts/cache.properties.lock -------------------------------------------------------------------------------- /SpacingTextView/.gradle/2.8/taskArtifacts/fileHashes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/.gradle/2.8/taskArtifacts/fileHashes.bin -------------------------------------------------------------------------------- /SpacingTextView/.gradle/2.8/taskArtifacts/fileSnapshots.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/.gradle/2.8/taskArtifacts/fileSnapshots.bin -------------------------------------------------------------------------------- /SpacingTextView/.gradle/2.8/taskArtifacts/outputFileStates.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/.gradle/2.8/taskArtifacts/outputFileStates.bin -------------------------------------------------------------------------------- /SpacingTextView/.gradle/2.8/taskArtifacts/taskArtifacts.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/.gradle/2.8/taskArtifacts/taskArtifacts.bin -------------------------------------------------------------------------------- /SpacingTextView/.idea/.name: -------------------------------------------------------------------------------- 1 | SpacingTextView -------------------------------------------------------------------------------- /SpacingTextView/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 23 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/animated_vector_drawable_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/appcompat_v7_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/design_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/recyclerview_v7_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/support_annotations_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/support_v4_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/libraries/support_vector_drawable_23_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 1.8 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /SpacingTextView/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 47 | 1234 | 1239 | 1592 | 1595 | 1596 | 1597 | 1602 | 1603 | 1604 | 1605 | 1606 | 1607 | 1608 | 1609 | 1610 | 1611 | 1612 | 1613 | 1614 | 1615 | 1616 | 1617 | 1618 | 1619 | 1620 | 1621 | 1622 | 1623 | 1624 | 1625 | 1626 | 1627 | 1628 | 1629 | 1630 | 1631 | 1632 | 1633 | 1636 | 1637 | 1638 | 1639 | 1642 | 1643 | 1646 | 1647 | 1648 | 1649 | 1652 | 1653 | 1656 | 1657 | 1660 | 1661 | 1662 | 1663 | 1666 | 1667 | 1670 | 1671 | 1674 | 1675 | 1678 | 1679 | 1680 | 1681 | 1684 | 1685 | 1688 | 1689 | 1692 | 1693 | 1696 | 1697 | 1698 | 1699 | 1700 | 1701 | 1702 | 1703 | 1706 | 1707 | 1708 | 1709 | 1712 | 1713 | 1716 | 1717 | 1720 | 1721 | 1722 | 1723 | 1726 | 1727 | 1730 | 1731 | 1734 | 1735 | 1736 | 1737 | 1740 | 1741 | 1744 | 1745 | 1746 | 1747 | 1748 | 1749 | 1750 | 1751 | 1752 | 1753 | 1754 | 1755 | 1756 | 1757 | 1758 | 1759 | 1760 | 1782 | 1783 | 1784 | 1797 | 1798 | 1799 | 1800 | 1814 | 1815 | 1816 | 1817 | 1820 | 1821 | 1822 | 1829 | 1830 | 1831 | 1832 | 1850 | 1857 | 1858 | 1859 | 1881 | 1882 | 1883 | 1884 | 1885 | 1893 | 1894 | 1896 | 1897 | 1898 | 1899 | 1900 | 1901 | 1902 | 1903 | 1904 | 1458718906596 1905 | 1908 | 1909 | 1910 | 1911 | 1912 | 1913 | 1914 | 1915 | 1916 | 1917 | 1918 | 1919 | 1920 | 1921 | 1922 | 1923 | 1924 | 1925 | 1926 | 1927 | 1928 | 1929 | 1930 | 1931 | 1932 | 1933 | 1934 | 1935 | 1936 | 1937 | 1938 | 1939 | 1940 | 1941 | 1942 | 1943 | 1944 | 1947 | 1950 | 1951 | 1952 | 1954 | 1955 | 1956 | 1957 | 1958 | -------------------------------------------------------------------------------- /SpacingTextView/SpacingTextView.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /SpacingTextView/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /SpacingTextView/app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /SpacingTextView/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.2" 6 | 7 | defaultConfig { 8 | applicationId "com.woyou.spacingtextview" 9 | minSdkVersion 19 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.2.0' 26 | compile 'com.android.support:design:23.2.0' 27 | } 28 | -------------------------------------------------------------------------------- /SpacingTextView/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in F:\android-sdk\android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/androidTest/java/com/woyou/spacingtextview/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.woyou.spacingtextview; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/java/com/woyou/spacingtextview/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.woyou.spacingtextview; 2 | 3 | import android.os.Bundle; 4 | import android.support.design.widget.FloatingActionButton; 5 | import android.support.design.widget.Snackbar; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.Toolbar; 8 | import android.view.View; 9 | import android.view.Menu; 10 | import android.view.MenuItem; 11 | 12 | public class MainActivity extends AppCompatActivity { 13 | private SpacingTextView mSpacingTextView; 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_main); 19 | mSpacingTextView = (SpacingTextView) findViewById(R.id.space_text); 20 | mSpacingTextView.setText(getResources().getString(R.string.test)); 21 | //Or any float. To reset to normal, use 0 or LetterSpacingTextView.Spacing.NORMAL 22 | mSpacingTextView.setLetterSpacing(10); 23 | 24 | 25 | } 26 | 27 | @Override 28 | public boolean onCreateOptionsMenu(Menu menu) { 29 | // Inflate the menu; this adds items to the action bar if it is present. 30 | getMenuInflater().inflate(R.menu.menu_main, menu); 31 | return true; 32 | } 33 | 34 | @Override 35 | public boolean onOptionsItemSelected(MenuItem item) { 36 | // Handle action bar item clicks here. The action bar will 37 | // automatically handle clicks on the Home/Up button, so long 38 | // as you specify a parent activity in AndroidManifest.xml. 39 | int id = item.getItemId(); 40 | 41 | //noinspection SimplifiableIfStatement 42 | if (id == R.id.action_settings) { 43 | return true; 44 | } 45 | 46 | return super.onOptionsItemSelected(item); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/java/com/woyou/spacingtextview/SpacingTextView.java: -------------------------------------------------------------------------------- 1 | package com.woyou.spacingtextview; 2 | 3 | import android.content.Context; 4 | import android.text.Spannable; 5 | import android.text.SpannableString; 6 | import android.text.style.ScaleXSpan; 7 | import android.util.AttributeSet; 8 | import android.widget.TextView; 9 | 10 | /** 11 | * Created by Xiho on 2016/3/7. 12 | */ 13 | public class SpacingTextView extends TextView{ 14 | private float letterSpacing = LetterSpacing.BIGGEST; 15 | private CharSequence originalText = ""; 16 | 17 | 18 | public SpacingTextView(Context context) { 19 | super(context); 20 | } 21 | 22 | public SpacingTextView(Context context, AttributeSet attrs){ 23 | super(context, attrs); 24 | originalText = super.getText(); 25 | applyLetterSpacing(); 26 | this.invalidate(); 27 | } 28 | 29 | public SpacingTextView(Context context, AttributeSet attrs, int defStyle){ 30 | super(context, attrs, defStyle); 31 | } 32 | 33 | public float getLetterSpacing() { 34 | return letterSpacing; 35 | } 36 | 37 | public void setLetterSpacing(float letterSpacing) { 38 | this.letterSpacing = letterSpacing; 39 | applyLetterSpacing(); 40 | } 41 | 42 | @Override 43 | public void setText(CharSequence text, BufferType type) { 44 | originalText = text; 45 | applyLetterSpacing(); 46 | } 47 | 48 | @Override 49 | public CharSequence getText() { 50 | return originalText; 51 | } 52 | 53 | /** 54 | * 字距为任何字符串(技术上,一个简单的方法为CharSequence不使用)的TextView 55 | */ 56 | private void applyLetterSpacing() { 57 | if (this == null || this.originalText == null) return; 58 | StringBuilder builder = new StringBuilder(); 59 | for(int i = 0; i < originalText.length(); i++) { 60 | String c = ""+ originalText.charAt(i); 61 | builder.append(c.toLowerCase()); 62 | if(i+1 < originalText.length()) { 63 | builder.append("\u00A0"); 64 | } 65 | } 66 | SpannableString finalText = new SpannableString(builder.toString()); 67 | if(builder.toString().length() > 1) { 68 | for(int i = 1; i < builder.toString().length(); i+=2) { 69 | finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 70 | } 71 | } 72 | super.setText(finalText, BufferType.SPANNABLE); 73 | } 74 | 75 | public class LetterSpacing { 76 | public final static float NORMAL = 0; 77 | public final static float NORMALBIG = (float)0.025; 78 | public final static float BIG = (float)0.05; 79 | public final static float BIGGEST = (float)0.2; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 21 | 22 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-xuhao/SpacingTextView/3f73fd731c3f2875f58d6d391303e855b71788a4/SpacingTextView/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | > 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | SpacingTextView 3 | Settings 4 | 测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试 5 | 6 | -------------------------------------------------------------------------------- /SpacingTextView/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |