【问题标题】:Centering CardView in LinearLayout programmatically以编程方式在 LinearLayout 中居中 CardView
【发布时间】:2019-02-02 06:18:48
【问题描述】:
public void makeCard( Context context, View view, String time, String startpt1, String startpt2, String endpt1, String endpt2)
{
    CardView card = new CardView(context);
    LinearLayout ll = view.findViewById(R.id.rides);
    // Set the CardView layoutParams
    int w = getResources().getDimensionPixelSize(R.dimen._270sdp);
    int h = getResources().getDimensionPixelSize(R.dimen._120sdp);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(w, h);
    card.setForegroundGravity(17);
    card.setLayoutParams(params);


    card.setRadius(60);
    card.setCardElevation(60);

    Typeface latoregular = getResources().getFont(R.font.latoregular);
    Typeface latobold = getResources().getFont(R.font.latobold);
    // Initialize a new TextView to put in CardView

    TextView tv = new TextView(context);
    tv.setLayoutParams(params);
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    try {
        Date date = format.parse(time);
        tv.setText(date.toString());
        Log.d("ASD", String.valueOf(date));
    } catch (ParseException e) {
        e.printStackTrace();
    }

    tv.setTextSize(14);
    tv.setPadding(60,40,0,0);
    tv.setTextColor(Color.parseColor("#1fb286"));
    tv.setTypeface(latobold);
    tv.setTypeface(tv.getTypeface(), Typeface.BOLD);
    card.addView(tv);
    ll.addView(card);
}

这个卡片视图拥抱侧面,无论我如何改变布局重力,卡片都不会移动。我可以在左侧设置填充以使其看起来居中,但在不同尺寸的屏幕上它不会完全居中

【问题讨论】:

  • 您正在创建RelativeLayout.LayoutParams 并将它们用于LinearLayout 和CardView(这是一种FrameLayout)。这不太可能运作良好。据我所知,应该使用例如要添加到 LinearLayout 的 View 的 LinearLayout.LayoutParams。
  • 是的,那是我的错误。我把它改成了LinearLayout.LayoutParams,但是没有叫addRule的类函数(它只用于RelativeLayout)那我用什么来居中呢?
  • 也许this post 有帮助
  • 是的,成功了!谢谢!
  • 您想将其添加为答案吗? LinearLayout.LayoutParams 参数 = new LinearLayout.LayoutParams(w, h); params.gravity = Gravity.CENTER;是什么解决了它

标签: android textview android-cardview cardview


【解决方案1】:

您正在创建RelativeLayout.LayoutParams 并将它们用于LinearLayoutCardView(这是FrameLayout 的一种)。这不太可能运作良好。据我所知,应该使用例如LinearLayout.LayoutParams 用于要添加到 LinearLayoutView(经验法则:使用以父 ViewGroup 命名的 LayoutParams

为了使CardView居中,您必须以编程方式设置其android:layout_gravity属性:

int w = getResources().getDimensionPixelSize(R.dimen._270sdp);
int h = getResources().getDimensionPixelSize(R.dimen._120sdp);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(w, h);   
params.gravity = Gravity.CENTER;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-01-29
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多