├── .gitignore
├── LICENSE
├── README.md
├── build.gradle
├── lib
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── github
│ │ │ └── edsergeev
│ │ │ └── TextFloatingActionButton.java
│ └── res
│ │ └── values
│ │ ├── TextFloatingActionButtonStylable.xml
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── github
│ └── edsergeev
│ └── ExampleUnitTest.java
├── settings.gradle
└── testapp
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── src
├── androidTest
│ └── java
│ │ └── com
│ │ └── example
│ │ └── testapp
│ │ └── ExampleInstrumentedTest.java
├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── testapp
│ │ │ └── MainActivity.java
│ └── res
│ │ ├── drawable-xhdpi
│ │ └── ic_draft_n_black.png
│ │ ├── drawable-xxhdpi
│ │ └── ic_draft_n_black.png
│ │ ├── drawable-xxxhdpi
│ │ └── ic_draft_n_black.png
│ │ ├── 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
│ └── example
│ └── testapp
│ └── ExampleUnitTest.java
└── text-fab-sample.gif
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the ART/Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 |
16 | # Gradle files
17 | .gradle/
18 | build/
19 |
20 | # Local configuration file (sdk path, etc)
21 | local.properties
22 |
23 | # Proguard folder generated by Eclipse
24 | proguard/
25 |
26 | # Log Files
27 | *.log
28 |
29 | # Android Studio Navigation editor temp files
30 | .navigation/
31 |
32 | # Android Studio captures folder
33 | captures/
34 |
35 | # Intellij
36 | *.iml
37 | .idea/
38 |
39 | # Keystore files
40 | *.jks
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Eduard Sergeev
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TextFloatingActionButton
2 | Android floating action button (fab) with text
3 |
4 | 
5 |
6 | ## Download
7 |
8 | Download via Gradle:
9 | ```groovy
10 | compile 'com.github.edsergeev:text-fab:1.0.0'
11 | ```
12 |
13 | ## Usage
14 |
15 | You can use it as regular _FloatingActionButton_, but with additional attributes
16 |
17 | ```xml
18 |
36 | ```
37 |
38 | ## License
39 |
40 | Licensed under the Apache License, Version 2.0 (the "License");
41 |
42 | http://www.apache.org/licenses/LICENSE-2.0
43 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | mavenCentral()
7 | mavenLocal()
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:2.2.3'
11 |
12 | // NOTE: Do not place your application dependencies here; they belong
13 | // in the individual module build.gradle files
14 | classpath 'com.novoda:bintray-release:0.3.4'
15 | }
16 | }
17 |
18 | allprojects {
19 | repositories {
20 | jcenter()
21 | }
22 | }
23 |
24 | apply plugin: 'java'
25 | apply plugin: 'idea'
26 |
--------------------------------------------------------------------------------
/lib/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/lib/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | def version = "1.0.0"
5 | def code = 10000
6 |
7 | android {
8 | compileSdkVersion 25
9 | buildToolsVersion "24.0.3"
10 |
11 | defaultConfig {
12 | minSdkVersion 15
13 | targetSdkVersion 25
14 | versionCode code
15 | versionName version
16 |
17 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
18 |
19 | }
20 | buildTypes {
21 | release {
22 | minifyEnabled false
23 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
24 | }
25 | }
26 | }
27 |
28 | dependencies {
29 | compile fileTree(dir: 'libs', include: ['*.jar'])
30 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
31 | exclude group: 'com.android.support', module: 'support-annotations'
32 | })
33 | compile 'com.android.support:support-v4:25.1.0'
34 | compile 'com.android.support:appcompat-v7:25.1.0'
35 | compile 'com.android.support:design:25.1.0'
36 |
37 | testCompile 'junit:junit:4.12'
38 | }
39 |
40 |
41 | task sourcesJar(type: Jar) {
42 | project
43 | from android.sourceSets.main.java.srcDirs
44 | classifier = 'sources'
45 | }
46 |
47 | task javadoc(type: Javadoc) {
48 | source = android.sourceSets.main.java.srcDirs
49 | classpath = files(android.getBootClasspath().join(File.pathSeparator))
50 | }
51 |
52 | task javadocJar(type: Jar, dependsOn: javadoc) {
53 | classifier = 'javadoc'
54 | from javadoc.destinationDir
55 | }
56 |
57 | artifacts {
58 | archives javadocJar
59 | archives sourcesJar
60 | }
61 |
62 | Properties properties = new Properties()
63 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
64 |
65 | publish {
66 | bintrayUser = properties.getProperty('bintray.user')
67 | bintrayKey = properties.getProperty('bintray.apikey')
68 | dryRun = false
69 | groupId = 'com.github.edsergeev'
70 | artifactId = 'text-fab'
71 | publishVersion = version
72 | desc = 'Android UI widget'
73 | licences = ['Apache-2.0']
74 | website = 'https://github.com/EdSergeev/TextFloatingActionButton'
75 | }
--------------------------------------------------------------------------------
/lib/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 /Users/e.sergeev/Library/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 |
--------------------------------------------------------------------------------
/lib/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/github/edsergeev/TextFloatingActionButton.java:
--------------------------------------------------------------------------------
1 | package com.github.edsergeev;
2 |
3 | import android.content.Context;
4 | import android.content.res.ColorStateList;
5 | import android.content.res.Resources;
6 | import android.content.res.TypedArray;
7 | import android.graphics.Canvas;
8 | import android.graphics.Color;
9 | import android.graphics.Paint;
10 | import android.graphics.Typeface;
11 | import android.support.design.widget.FloatingActionButton;
12 | import android.text.TextPaint;
13 | import android.util.AttributeSet;
14 |
15 |
16 | public class TextFloatingActionButton extends FloatingActionButton {
17 | private static final int SANS = 1;
18 | private static final int SERIF = 2;
19 | private static final int MONOSPACE = 3;
20 |
21 | private final TextPaint mTextPaint;
22 | private final int yCenterOffset;
23 | private ColorStateList mTextColor;
24 | private CharSequence mText = "";
25 | private int textXoffset;
26 | private int textYoffset;
27 |
28 | public TextFloatingActionButton(Context context) {
29 | this(context, null);
30 | }
31 |
32 | public TextFloatingActionButton(Context context, AttributeSet attrs) {
33 | this(context, attrs, 0);
34 | }
35 |
36 | public TextFloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
37 | super(context, attrs, defStyleAttr);
38 |
39 | final Resources res = getResources();
40 |
41 | mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
42 | mTextPaint.density = res.getDisplayMetrics().density;
43 | mTextPaint.setTextAlign(Paint.Align.CENTER);
44 | yCenterOffset = -(int) ((mTextPaint.descent() + mTextPaint.ascent()) / 2);
45 |
46 | init(context, attrs, defStyleAttr);
47 | }
48 |
49 | private void init(Context context, AttributeSet attrs, int defStyleAttr) {
50 |
51 | CharSequence text = "";
52 | ColorStateList textColor = null;
53 | int textSize = 15;
54 | int typefaceIndex = -1;
55 | int styleIndex = -1;
56 | String fontFamily = null;
57 | boolean fontFamilyExplicit = false;
58 |
59 | final Resources.Theme theme = context.getTheme();
60 |
61 | TypedArray a = theme.obtainStyledAttributes(
62 | attrs, R.styleable.TextFloatingActionButton, defStyleAttr, 0);
63 |
64 | int n = a.getIndexCount();
65 | for (int i = 0; i < n; i++) {
66 | int attr = a.getIndex(i);
67 |
68 | if (attr == R.styleable.TextFloatingActionButton_android_text) {
69 | text = a.getText(attr);
70 |
71 | } else if (attr == R.styleable.TextFloatingActionButton_android_textColor) {
72 | textColor = a.getColorStateList(attr);
73 |
74 | } else if (attr == R.styleable.TextFloatingActionButton_android_textSize) {
75 | textSize = a.getDimensionPixelSize(attr, textSize);
76 |
77 | } else if (attr == R.styleable.TextFloatingActionButton_android_typeface) {
78 | typefaceIndex = a.getInt(attr, typefaceIndex);
79 |
80 | } else if (attr == R.styleable.TextFloatingActionButton_android_fontFamily) {
81 | fontFamily = a.getString(attr);
82 | fontFamilyExplicit = true;
83 |
84 | } else if (attr == R.styleable.TextFloatingActionButton_android_textStyle) {
85 | styleIndex = a.getInt(attr, styleIndex);
86 |
87 | } else if (attr == R.styleable.TextFloatingActionButton_text_x_offset) {
88 | textXoffset = a.getLayoutDimension(attr, 0);
89 |
90 | } else if (attr == R.styleable.TextFloatingActionButton_text_y_offset) {
91 | textYoffset = a.getLayoutDimension(attr, 0);
92 | }
93 | }
94 | a.recycle();
95 |
96 | if (typefaceIndex != -1 && !fontFamilyExplicit) {
97 | fontFamily = null;
98 | }
99 | setTypefaceFromAttrs(fontFamily, typefaceIndex, styleIndex);
100 |
101 | setTextColor(textColor != null ? textColor : ColorStateList.valueOf(Color.BLACK));
102 |
103 | mTextPaint.setTextSize(textSize);
104 |
105 | setText(text);
106 | }
107 |
108 | private void setTypefaceFromAttrs(String familyName, int typefaceIndex, int styleIndex) {
109 | Typeface tf = null;
110 | if (familyName != null) {
111 | tf = Typeface.create(familyName, styleIndex);
112 | if (tf != null) {
113 | setTypeface(tf);
114 | return;
115 | }
116 | }
117 | switch (typefaceIndex) {
118 | case SANS:
119 | tf = Typeface.SANS_SERIF;
120 | break;
121 |
122 | case SERIF:
123 | tf = Typeface.SERIF;
124 | break;
125 |
126 | case MONOSPACE:
127 | tf = Typeface.MONOSPACE;
128 | break;
129 | }
130 |
131 | setTypeface(tf, styleIndex);
132 | }
133 |
134 | public void setTypeface(Typeface tf) {
135 | if (mTextPaint.getTypeface() != tf) {
136 | mTextPaint.setTypeface(tf);
137 | invalidate();
138 | }
139 | }
140 |
141 | public void setTypeface(Typeface tf, int style) {
142 | if (style > 0) {
143 | if (tf == null) {
144 | tf = Typeface.defaultFromStyle(style);
145 | } else {
146 | tf = Typeface.create(tf, style);
147 | }
148 |
149 | setTypeface(tf);
150 | // now compute what (if any) algorithmic styling is needed
151 | int typefaceStyle = tf != null ? tf.getStyle() : 0;
152 | int need = style & ~typefaceStyle;
153 | mTextPaint.setFakeBoldText((need & Typeface.BOLD) != 0);
154 | mTextPaint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
155 | } else {
156 | mTextPaint.setFakeBoldText(false);
157 | mTextPaint.setTextSkewX(0);
158 | setTypeface(tf);
159 | }
160 | }
161 |
162 | public void setTextColor(ColorStateList colors) {
163 | if (colors == null) {
164 | throw new NullPointerException();
165 | }
166 |
167 | mTextColor = colors;
168 | }
169 |
170 | public void setText(CharSequence text) {
171 | mText = text;
172 | invalidate();
173 | }
174 |
175 | @Override
176 | protected void onDraw(Canvas canvas) {
177 | super.onDraw(canvas);
178 |
179 | int color = mTextColor.getColorForState(getDrawableState(), Color.BLACK);
180 | mTextPaint.setColor(color);
181 |
182 | canvas.save();
183 |
184 | canvas.translate(getWidth() / 2, getHeight() / 2);
185 |
186 | canvas.drawText(mText, 0, mText.length(), textXoffset, textYoffset + yCenterOffset, mTextPaint);
187 |
188 | canvas.restore();
189 | }
190 | }
191 |
--------------------------------------------------------------------------------
/lib/src/main/res/values/TextFloatingActionButtonStylable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Lib
3 |
4 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/github/edsergeev/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.github.edsergeev;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.assertEquals;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':lib', ':testapp'
2 |
--------------------------------------------------------------------------------
/testapp/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/testapp/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 25
5 | buildToolsVersion "25.0.0"
6 |
7 | defaultConfig {
8 | applicationId "com.example.testapp"
9 | minSdkVersion 15
10 | targetSdkVersion 25
11 | versionCode 1
12 | versionName "1.0"
13 |
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 |
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(include: ['*.jar'], dir: 'libs')
27 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
28 | exclude group: 'com.android.support', module: 'support-annotations'
29 | })
30 | compile 'com.android.support:appcompat-v7:25.1.0'
31 | compile 'com.android.support:design:25.1.0'
32 | testCompile 'junit:junit:4.12'
33 | compile project(':lib')
34 | }
35 |
--------------------------------------------------------------------------------
/testapp/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 /Users/e.sergeev/Library/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 |
--------------------------------------------------------------------------------
/testapp/src/androidTest/java/com/example/testapp/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.example.testapp;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.assertEquals;
11 |
12 | /**
13 | * Instrumentation test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.example.testapp", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/testapp/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/testapp/src/main/java/com/example/testapp/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.example.testapp;
2 |
3 | import android.os.Bundle;
4 | import android.support.v7.app.AppCompatActivity;
5 | import android.support.v7.widget.Toolbar;
6 | import android.view.Menu;
7 | import android.view.MenuItem;
8 | import android.view.View;
9 |
10 | import com.github.edsergeev.TextFloatingActionButton;
11 |
12 | public class MainActivity extends AppCompatActivity {
13 |
14 | private int counter;
15 |
16 | @Override
17 | protected void onCreate(Bundle savedInstanceState) {
18 | super.onCreate(savedInstanceState);
19 | setContentView(R.layout.activity_main);
20 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
21 | setSupportActionBar(toolbar);
22 |
23 | final TextFloatingActionButton fab = (TextFloatingActionButton) findViewById(R.id.fab);
24 | fab.setText(String.valueOf(++counter));
25 |
26 | fab.setOnClickListener(new View.OnClickListener() {
27 | @Override
28 | public void onClick(View view) {
29 | fab.setText(String.valueOf(++counter));
30 | }
31 | });
32 | }
33 |
34 | @Override
35 | public boolean onCreateOptionsMenu(Menu menu) {
36 | // Inflate the menu; this adds items to the action bar if it is present.
37 | getMenuInflater().inflate(R.menu.menu_main, menu);
38 | return true;
39 | }
40 |
41 | @Override
42 | public boolean onOptionsItemSelected(MenuItem item) {
43 | // Handle action bar item clicks here. The action bar will
44 | // automatically handle clicks on the Home/Up button, so long
45 | // as you specify a parent activity in AndroidManifest.xml.
46 | int id = item.getItemId();
47 |
48 | //noinspection SimplifiableIfStatement
49 | if (id == R.id.action_settings) {
50 | return true;
51 | }
52 |
53 | return super.onOptionsItemSelected(item);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/testapp/src/main/res/drawable-xhdpi/ic_draft_n_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/drawable-xhdpi/ic_draft_n_black.png
--------------------------------------------------------------------------------
/testapp/src/main/res/drawable-xxhdpi/ic_draft_n_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/drawable-xxhdpi/ic_draft_n_black.png
--------------------------------------------------------------------------------
/testapp/src/main/res/drawable-xxxhdpi/ic_draft_n_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/drawable-xxxhdpi/ic_draft_n_black.png
--------------------------------------------------------------------------------
/testapp/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
21 |
22 |
23 |
24 |
25 |
26 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/testapp/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/testapp/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/testapp/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testapp/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testapp/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testapp/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testapp/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/testapp/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/testapp/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/testapp/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/testapp/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Test App
3 | Settings
4 |
5 |
--------------------------------------------------------------------------------
/testapp/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/testapp/src/test/java/com/example/testapp/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.example.testapp;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.assertEquals;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/testapp/text-fab-sample.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EdSergeev/TextFloatingActionButton/dbf05b1d298ccf2a8ea8b6e8124089eb6e7369ae/testapp/text-fab-sample.gif
--------------------------------------------------------------------------------