android


Android - How to set visibility in xml depending on device?


I have a TextView in my activity that should be visible normally, but gone for tablet devices.
I know I can create a new layout file for the tablet, but that seems like a lot of duplication, so what I am trying to do is set in my (single) layout file something like...
android:visibility="#string/my_textview_visibility"
...for the TextView. And then, in my strings resources files, set...
<string name="my_textview_visibility">gone</string> (in values/strings.xml)
...and...
<string name="my_textview_visibility">visible</string> (in values-sw720dp/strings.xml)
...to hide the TextView for tablets.
However, when I try this, the app crashes when trying to show that activity.
Do I need to use the constant values instead of the above string values - e.g.,
"visible" -> 0
"gone" -> 8
..and, if so, what is the correct way to add/reference those values to/from my XML files?
Or is there another/better way of doing it?
NB - I do not want to show/hide the TextView programatically in my Java code.
You should be using /values/integers/ instead:
values/integers.xml
<integer name="my_textview_visibility">0</integer> <!-- 0 = View.VISIBLE -->
values-sw720dp/integers.xml
<integer name="my_textview_visibility">2</integer> <!-- 2 = View.GONE -->
Then called like so:
android:visibility="#integer/my_textview_visibility"
ChrisStillwell's answer is correct. But the values are incorrect according to the Android Documentation
As you said, the best way to do this is to create a specific layout for tablets where your TextView will be hidden. However, it is possible to do this using xml boolean resources : (as res/values-sw600dp/):
<resources>
<bool name="isTablet">true</bool>
</resources>
Because the sw600dp qualifier is only valid for platforms above android 3.2. If you want to make sure this technique works on all platforms (before 3.2), create the same file in res/values-xlarge folder:
<resources>
<bool name="isTablet">true</bool>
</resources>
Then, in the "standard" value file (as res/values/), you set the boolean to false:
<resources>
<bool name="isTablet">false</bool>
</resources>
Then in you activity, you can get this value and check if you are running in a tablet size device:
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
// do something
} else {
// do something else
}
Font : Determine if the device is a smartphone or tablet?

Related Links

Use same animation at different times, in different elements
Android image ACTION_VIEW “no activity found to handle intent”
How to implement the “parent-to-child” navigational transition as prescribed by Material Design
Cordova app won't log in via facebook
sl4a permission issue after android upgrade
Show suggestions for AutoCompleteTextView from an XML file
Gradle “MyApplication4” project refresh failed Error: Connection refused: connect
Android Wear Intent Extras Empty
Get all drawables icons as an array
java.util.concurrent.TimeoutException: android.view.ThreadedRenderer.finalize() timed out after 10 seconds
I can not connect Google Cloud Messaging to Android client
Adding buttons to a OSM (open street map) view OSMDroid
How to stop service when application crash
Jobscheduler API android L
Android Studio: disable design tab or change key binding to open it
How To pass String Values inside the url for Form validation in android [closed]

Categories

HOME
google-cloud-platform
spark-streaming
jwplayer
static-site
mips
3d-reconstruction
telegram-bot
hugo
settings
opengl-3
pkcs#11
teechart
spin
windows-ce
activecollab
emoji
line
shared-libraries
mongodb-csharp
libusb
do-while
event-sourcing
symfony-2.8
identity-management
syntax-highlighting
pylons
sinch
subclass
errbot
failover
userdefaults
mockjax
spring-security4
gnat-gps
openwhisk
browser-extension
imx6
getlasterror
python-pptx
metawidget
spring-mvc-test
hackintosh
laravel-elixir
subclipse
install.packages
optimizely
automapper-5
configurationmanager
magic-draw
appdomain
excel-dna
otp
rackspace-cloud
shinobi
rocks
cudd
pytables
omxplayer
custom-lists
pacemaker
yajsw
ellucian-scribe
np-spring
exim4
assertion
computer-architecture
google-books
skspritenode
matlab-deployment
kubuntu
android-broadcast
rrule
qtwebengine
ejb-2.x
sonarqube-5.0
ora-00904
alternate
koala
insert-id
virtual-pc
curb
gobject-introspection
denied
jquery-tools
umra
socketserver
cac
facebook-iframe
non-clustered-index
eclipse-marketplace
duplex
cfwindow
strtod
change-management
cardspace

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App