为什么我的TextClock没有显示价值

时间:2017-03-22 07:49:20

标签: android

为什么我的tv1(TextView)无法显示TextClock的任何值?有没有错字?,

这是图片代码

error code

TextClock time = (TextClock) findViewById(R.id.bgclock);
TextView tv1 = (TextView) findViewById(R.id.textView3);

String hour = time.getText().toString();
tv1.setText(hour);

3 个答案:

答案 0 :(得分:0)

您可以使用getText()的唯一原因是因为TextClockTextView,但这并不意味着您获得它的实际字符串值。

不清楚你想要什么价值,但这些应该有效。

String hour = time.getFormat12Hour();
tv1.setText(hour);

或者

String hour = time.getFormat24Hour();
tv1.setText(hour);

或(最好)

tv1.setText(time.is24HourModeEnabled() ? 
    time.getFormat24Hour() : time.getFormat12Hour());

或者,如果您想要时间,SimpleDateFormat也可以。

答案 1 :(得分:0)

你的问题其实很模糊。我没有得到你的意思无法显示。但是我猜你的问题是你得到一个空字符串因为你太早称它。在这种情况下,试试这个:

import android.support.v7.app.AppCompactActivity;
import android.os.Bundle;
import android.widget.TextClock;
import android.widget.Textview;

public class MainActivity extends AppCompactActivity{

@Override
protected void onCreate(){
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    ViewTreeObserver vto = layout.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    ViewTreeObserver obs = layout.getViewTreeObserver();
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                            obs.removeOnGlobalLayoutListener(this);
                    }
            else {
                            obs.removeGlobalOnLayoutListener(this);
                    }
                    TextClock time=(TextClock)findViewById(R.id.bgclock);
            TextView tv1=(TextView)findViewById(R.id.textView3);

            String hour=time.getText().toString();
            tv1.setText(hour);
                }

    });
}

答案 2 :(得分:0)

这是另一种方法,它更复杂,但是一旦使用ViewTreeObserver在文本中布局了TextClock的文本,它就会得到它的实际值。

请注意,cricket_007的回复也会有效,这取决于您要实现的目标以及您希望如何实现目标。

XML布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/layout_text_clock"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="se.ifthenel.android.aclock.MainActivity">

    <TextView
      android:id="@+id/text_time_label"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Time here!"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
    <TextClock
      android:id="@+id/text_clock"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@+id/text_time_label"
      android:layout_centerHorizontal="true" />

</RelativeLayout>

<强> MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewTreeObserver;
import android.widget.RelativeLayout;
import android.widget.TextClock;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_text_clock);
    ViewTreeObserver vto = layout.getViewTreeObserver();
    vto.addOnGlobalLayoutListener (new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
        // Stop listening to the ViewtreeObserver from now on
        layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        TextView textLabel = (TextView) findViewById(R.id.text_time_label);
        TextClock textClock = (TextClock) findViewById(R.id.text_clock);
        String hour = textClock.getText().toString();
        textLabel.setText(hour);

      }
    });

  }
}