Change Layout Of Text Created In Java [Android] - android

Ok right , i asked how to create a random number from 1-100 for android and i came to this
TextView tv = new TextView(this);
int random = (int)Math.ceil(Math.random()*101);
tv.setText("Your Number Is..."+ random );
What this does is create the default kinda "hello world" style text view and says "Your Number Is.... [Then Random Number]
My problem is that i cant change the layout of this text , because it is not defined in XML, if someone could tell me how to change the style , or like make the random number into a string so i could use it for any Textview layout that would be great ..
Thanks :)

If by change the style you mean the text color, text size, and you want to change them programmatically, have a look at the setTextColor and setTextSize methods.
More info here
If you want more advanced formatting to set programmatically, see this link.
The below example demonstrates how to make your text bold and italic.
tv.setText("Your Number Is..."+ random, TextView.BufferType.SPANNABLE );
Spannable myText = (Spannable) tv.getText();
myText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),0,myText.length(),0);
Edit:
Try the below for the android:textSize="100dp" and android:gravity="center" :
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 100);
tv.setGravity(Gravity.CENTER);

Putting it into a string is easy.
String randomAsAString = Integer.toString(random)
You can then use the XML properties of the TextView to change its formatting, such as android:textSize="30dp" or android:textColor="#900".
By the way, if you're happy with the answer to your previous question, you should go back and mark an answer as "Accepted". That gives 'reputation' points to the person whose answer you accepted and closes the question so that people don't think you're still waiting for a better answer. You can read more about reputation in the FAQ.
Edit:
You can't reference the string entirely in xml while still giving it a random number. This is because the "#string/some_string" format only allows unchangeable strings. The execption to this is using parameters, e.g. setting the string as
<string name="random_number">The random number is %d</string>
Then you could call up that string using something like
yourTextView.setText(this.getString(R.string.random_number, random))
As for your other question about setting a background to a textView, that's also easy.
yourTextView.setBackgroundDrawable(R.drawable.....)
You should take advantage of Eclipse's autocomplete feature... it makes finding these commands a lot easier. For example, simply type the name of your TextView followed by a period, pause half a second for the list of options to come up, then "setB" and it should then filter the list to the three setBackground Drawable/Resource/Color options.

tv.setText(Html.fromHtml("Your number is: <b>" + random + "</b>"));
For basic HTML text-styling tags.

You could also do something like this.
Define your string in strings.xml like:
<string name="your_number_is">Your number is <xliff:g id="number">%s</xliff:g>.</string>
Create a TextView in a layout xml:
<TextView android:id="#+id/your_number_is"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="#string/your_number_is"
android:gravity="center"
android:textSize="100dip"
/>
Then your code would look like:
TextView tv = (TextView) findViewById(R.id.your_number_is);
int random = (int)Math.ceil(Math.random()*101);
tv.setText(getString(R.string.your_number_is, random));
This will make it a lot easier when you later on would like to change your text or maybe localize your app.

if you have thead troubles use this:
new Thread(){
public void run(){
TextView v = (TextView)findViewById(R.id.mytext);
v.setText("TEST");
}
}.start();

Related

How to underline the space of a string with spacing

In android xml how to underline the string with the spacing? If I using the underscore it will look not nicely because there are some gap between the underscore.
Example below are the underline that have gaps
Example below are the one that I looking for:
Make drawable for underscore line and set between that views.
Or use like this
TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(Html.fromHtml("Go<u> </u>Travel"));
The output is :
Go_______Travel
String temp = "Go Travel"
temp=temp.replaceAll(" ", "_"); // return Go______Travel
Note that it is just the simple logic, you can obviously use many other solutions based on your application/business logic.
Hope it helps.

Hide only part of text in TextView

Good Day i want to hide some specified or certain part of text in textview!Important: Im not talking about hide the full textview with TextView.setVisibility(View.Gone) I'm not talking about transparent of TEXT in textview!im not talking about hiding full text in textview!So please help me to hide some text.
Example: lets say i have a textview with this text (10-Sporting Goods)
I want to hide the (10-) and show only Sporting Goods text.Any help will be appreciated!Thank you very much beforehand!
Although even i would appreciate for your case to strongly go with DroidWorm/Gabriella approach , just for the information of all the other folks who may see this in future.
If you really wish to hide just a portion of your textview which has the entire string in itself, you should use a SpannableString , as below:-
tvHello = (TextView) findViewById(R.id.tvHello);
SpannableString customText = new SpannableString("10-Sporting Good");
customText.setSpan(new RelativeSizeSpan(.1f), 0, 3, 0);
tvHello.setText(customText);
This code will technically HIDE the 10- from 10-Sporting Good without using a substring.
You could try to get the whole text like
String text = textView.getText().toString();
and then make substring of it like this:
String wantedSubstr = text.substring(4); //for example - everything from the 4th index to the end
then set this substring as text of your textView like this:
textView.setText(wantedSubstr);
There is one the possible solution of it is that..First you have to find the index(position) of "-" and than split the string according to it therefore use below code
String text = textView.getText().toString();
int position=text.indexOf('-');
String wantedSubstr = text.substring(position+1);
textView.setText(wantedSubstr);
Will there always been "10_" in front of it? Or will there always be 3 characters before the text you want? Or will there always be a "-" or "_" before the text you want?
If so, you could just do a simple method which takes the substring and then updates the textview. If so I can help you write a simple method
You cannot hide part of textView, instead you can make a substring of the specific string and setText using it.
Do it like:
String originalString = "10-Sporting Goods";
String subString = originalString.substring(3);
textView.setText(asubstring);

Use string from MainActivity.java in activity_main.xml

I have a string defined in MainActivity.java:
public String counter1 = String.valueOf(e.getCount());
I would like to use this string in activity_main.xml as:
android:text="#string/counter1"
As you can tell I am very new to this so basic steps would be appreciated.
Thanks
Short answer: you cannot. The resources you set in your xml layouts must be statically defined in resources files, like.-
<string name="counter1">COUNTER VALUE</string>
To dynamically define new strings, you must set them programmatically.-
TextView textView = (TextView) findViewById(R.id.textViewId);
textView.setText(counter1);
What do you want to do if you could get this to work? If you want to set text dynamically, you can use setText:
yourTextView.setText(counter1);
If you want to set something programmatically which you can... you should use
txtview.setText(yourString);
if you want to set a String in XML then you either set it in the XML like you did
android:text="Exercise Name"
or using strings which then you can use programmatically as well
in strings:
<string name="Delete">Delete</string>
in code you can call it with R.string.Delete or getString(R.string.app_name);
of course you can also set from strings in XML with #string...
by the sound of what you are trying to do, you want the TextView to change while program is running so the first option would suit you well
you can not,if you want to acheive this kind of solution:
create string in strings.xml
<string name="counter1">value of counter</string>
and if you want to set the text of counter dynamically then in you activity:
TextView tView = (TextView) findViewById(R.id.textViewId);
tView.setText(counter1);
you should follow this,because all static strings shoul always be defined in strings.xml

A part of textview in android to be clickable

I have to display some text in textview.
I just want the a part of the text to be clickable and the rest of the text to be normal.
Here is my code:
TextView mTextView = (TextView) findViewById(R.id.txt);
String mText = "some text.Link to click.Some more text";
SpannableString sb = new SpannableString(mText);
sb.setSpan(new ClickableSpan() {
#Override
public void onClick(View widget) {
Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
startActivity(in);
}
}, mText.indexOf("Link"),mText.indexOf("Link") + 13,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(sb);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
If you are putting the full url into the TextView you can use android:autoLink="web" to greatly simplify this process.
See the TextView docs for more
Another option is the Html object. Specifically the fromHtml() method I think will allow you to achieve what you want. You should be able to do something like this:
mTextView.setText(Html.fromHtml("blah blah some text to be linkified blah blah"));
You could also use the linkify option: http://android-developers.blogspot.com/2008/03/linkify-your-text.html - In this case, you can just build your string dynamically, and make only the part of it you want clickable.
I had never heard of the autoLink attribute - cool.
Another option, which might be closer to your original question - you could create two different TextViews next to each other (if the spacing is odd, use layout_marginRight="-8" - using a negative offset, which may require a bit of tweaking to get the spacing perfect). Then you could apply the autoLink attribute to only the TextView you want to be clickable.

Dynamic Text Field - Android

I'm trying to create a dynamic text field that will take multiple fields of user input during a single activity, do a calculation in the java file, and then display the resulting value within the SAME activity in a text field.
Is there any way of doing this? I just figured out that I can't edit strings.xml dynamically, so are there any structures I can use that will allow me to constantly change the values?
Thanks all.
This will be pretty straight forward:
String yourTextValue = "text";
TextView myTextView = (TextView) findViewById(R.id.textView1);
myTextView.setText(yourTextValue);
Just call setText() with your String value (whatever it may be) each time you want to change the value of your TextView.

Categories

Resources