Android——布局管理器(十一)

news2024/12/24 7:42:56

1. 线性布局管理器:LinearLayout

1.1 知识点

(1)布局管理器简介;

(2)线型布局管理器的配置;

(3)通过Activity程序进行线型布局

1.2 具体内容

在android中,只要定义了组件的话,这个组件就必须放在线性布局管理器中,另外一部分就是组件一般会存在事件处理操作。

 先主要讲解线性布局管理器。

<LinearLayout 
    xmlns:android=http://schemas.android.com/apk/res/android—布局文件包含的是Android的命名空间
    xmlns:tools=http://schemas.android.com/tools—命名空间的工具
    android:layout_width="match_parent" –此布局宽度为全屏
    android:layout_height="match_parent" – 此布局高度全屏
    android:orientation="vertical"> --此布局中组件垂直码放
</LinearLayout>

线性布局管理器是android中最常用的布局管理器。

通过类的集成关系可以发现,线性布局管理器是一个特殊的组件,相比之前的组件来说,只是还可以放置其他的组件。

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/but1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="爱科技有限公司" />
    <Button
        android:id="@+id/but2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="www.wanczy.com" />
     <Button
        android:id="@+id/but3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="毛栗子" />

</LinearLayout>

 当然我们也可以通过Activity程序来配置我们的布局管理器,现在就不再使用布局文件了。

package com.example.linearlayoutproject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;

public class LinearLayoutActivity extends Activity {
	private LinearLayout layout = null;
	private Button but1 = null;
	private Button but2 = null;
	private Button but3 = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.layout = new LinearLayout(this);
        LinearLayout.LayoutParams layoutParams = 
        		new  LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
        				LinearLayout.LayoutParams.MATCH_PARENT);//准备布局管理器布局参数
        this.layout.setOrientation(LinearLayout.VERTICAL);//设置为垂直码放
        this.layout.setLayoutParams(layoutParams);//设置布局参数
        this.but1 = new Button(this);
        this.but1.setText("爱科技有限公司");
        this.but2 = new Button(this);
        this.but2.setText("www.aikeji.com");
        this.but3 = new Button(this);
        this.but3.setText("毛栗子");
        LinearLayout.LayoutParams butParams = 
        		new  LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
        				LinearLayout.LayoutParams.WRAP_CONTENT);//准备按钮布局参数
        this.layout.addView(this.but1,butParams);
        this.layout.addView(this.but2,butParams);
        this.layout.addView(this.but3,butParams);
        super.setContentView(layout);//此Activity程序使用的就是我们定义的布局管理器
    }
}

以上程序就是使用Activity程序完成线性布局,没有使用任何的布局文件,但是在开发中,布局管理器一般都是需要配置在布局文件中。

1.3 小结

(1)线型布局有两种排列方式:水平和垂直

(2)可以通过LinearLayout 类定义线型布局,而布局参数可以使用LinearLayout.LayoutParams类完成。

2. 框架布局管理器:FrameLayout

2.1 知识点

(1)掌握框架布局管理器的使用特点;

(2)可以在布局管理器之中使用框架布局进行排列;

(3)可以使用FrameLayout和FrameLayout.LayoutParams类在Activity程序之中动态生成布局。

2.2 具体内容

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/android02" />
    <EditText 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请输入您的姓名"
        />
	<Button 
	    android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你点我呀"
	    />
</FrameLayout>

 对于以上的程序来说,我们是感觉不到作用在哪里。

我们现在也可以不使用布局文件,而是直接在Activity程序中生成布局。

package com.example.framelayoutproject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;

public class FrameLayoutActivity extends Activity {
	private FrameLayout layout = null;
	private ImageView imgView = null;
	private EditText editText = null;
	private Button but = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.layout = new FrameLayout(this);
		FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
				FrameLayout.LayoutParams.MATCH_PARENT,
				FrameLayout.LayoutParams.MATCH_PARENT);// 准备FrameLayout布局参数
		this.layout.setLayoutParams(layoutParams);// 设置FrameLayout布局参数
		this.imgView = new ImageView(this);
		imgView.setImageResource(R.drawable.android02);// 设置图片组件要显示的图片
		this.editText = new EditText(this);
		this.editText.setText("请输入姓名:");
		this.but = new Button(this);
		this.but.setText("你点我呀");
		// 准备组件的布局参数
		FrameLayout.LayoutParams childParams = new FrameLayout.LayoutParams(
				FrameLayout.LayoutParams.WRAP_CONTENT,
				FrameLayout.LayoutParams.WRAP_CONTENT);//准备了组件的布局参数
		this.layout.addView(this.imgView,childParams);
		this.layout.addView(this.editText,childParams);
		this.layout.addView(this.but,childParams);
		setContentView(layout);
	}
}

 效果仍然是一样的,但是还是那句话,在以后的开发中,布局还是需要在布局文件中进行。很少写在Activity中。

2.3 小结

(1)框架布局是在一个指定的区域内使用组件进行填充;

(2)可以使用FrameLayout和FrameLayout.LayoutParams类手工配置布局。

3. 表格布局管理器:TableLayout

3.1 知识点

(1)掌握表格布局管理器的基本使用;

(2)掌握TableLayout和TableRow的操作关系;

(3)掌握表格布局管理器中常见属性的作用。

3.2 具体内容

一般在进行操作的时候,会经常使用到表格对数据进行排版,这样的好处在于阅读数据更加方便及美观。

范例:

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
	<TableRow –表示行
	    android:orientation="horizontal"
	    >
		<EditText 
		    android:layout_width="wrap_content"
    		    android:layout_height="wrap_content" 
		    android:text="请输入检索关键字"
		    />	    
	    <Button
	        android:layout_width="wrap_content"
    		    android:layout_height="wrap_content" 
    		    android:text="检索"
	        />
	</TableRow>
  	<TableRow 
	    android:orientation="horizontal"
	    >
		<TextView 
		    android:layout_width="wrap_content"
    		    android:layout_height="wrap_content" 
		    android:text="请选择编码"
		    />	    
	   <RadioGroup 
	       android:orientation="vertical"
	       android:layout_width="wrap_content"
    	       android:layout_height="wrap_content" 
    	       android:checkedButton="@+id/rb2"—默认选中rb2
	       >
	       <RadioButton 
	           android:id="@+id/rb1"
	           android:layout_width="wrap_content"
    		       android:layout_height="wrap_content" 
    		       android:text="UTF编码"
	           />
	       <RadioButton 
	           android:id="@+id/rb2"
	           android:layout_width="wrap_content"
    		   android:layout_height="wrap_content" 
    		   android:text="GBK编码"
	           />
	   </RadioGroup>
	</TableRow>
</TableLayout>

 以上的程序只是实现了简单的排版,对于表格来说,除了一些基本的排版之外呢,显示数据也是用的比较多的。

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
	<TableRow 
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content" 
	    >
	    <TextView 
	        android:layout_column="0"—定义列号
	        android:layout_width="wrap_content"
    		    android:layout_height="wrap_content" 
	        android:text="ID"
	        />
	    <TextView 
	        android:layout_column="1"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="姓名"
	        />
	    <TextView 
	        android:layout_column="2"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="Email"
	        />
	    <TextView 
	        android:layout_column="3"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="地址"
	        />
	</TableRow>
	<View –这边是定义一根横线
	    android:layout_height="2px"
	    android:background="#330033"
	    />
	<TableRow 
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content" 
	    >
	    <TextView 
	        android:layout_column="0"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="Wanczy"
	        />
	    <TextView 
	        android:layout_column="1"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="爱科技"
	        />
	    <TextView 
	        android:layout_column="2"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="888888@qq.com"
	        />
	    <TextView 
	        android:layout_column="3"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="光明大道1号"
	        />
	</TableRow>
	<TableRow 
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content" 
	    >
	    <TextView 
	        android:layout_column="0"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="MLZ"
	        />
	    <TextView 
	        android:layout_column="1"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="毛栗子"
	        />
	    <TextView 
	        android:layout_column="2"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="mlz_fc@163.com"
	        />
	    <TextView 
	        android:layout_column="3"
	        android:layout_width="wrap_content"
    		android:layout_height="wrap_content" 
	        android:text="光明大道2号"
	        />
	</TableRow>
</TableLayout>

如果屏幕的宽度不够,显示不下,这个时候我们可以设置伸缩列。

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:shrinkColumns="3">--表示设置第3列为伸缩列

现在是设置了一列为伸缩列,那么想要设置多列呢?

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:shrinkColumns="0,1,2,3">--设置了4个伸缩列

除了可以设置伸缩列之外,还可以设置隐藏列。

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:shrinkColumns="3"
    android:collapseColumns="0">--隐藏第0列

为表格设置背景。

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:shrinkColumns="3"
    android:collapseColumns="0"
    android:background="@drawable/background">--设置背景图片

从整个的代码来看,表格布局是非常灵活的,但是如果想要使用Activity程序去完成表格操作的话,那将是一个非常繁琐的一个过程。

package com.example.tablelayoutproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class TableLayoutActivity extends Activity {
	private String titleData[][] = new String[][] {
			{ "ID", "姓名", "EMAIL", "地址" },		// 标题头
			{ "爱科技", "888888@139.com","光明大道1号" },
			{"毛栗子", "mlz_fc.com", "光明大道2号" } };// 显示数据
		@Override
		public void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			TableLayout layout = new TableLayout(this);	// 表格布局
			TableLayout.LayoutParams layoutParam = new TableLayout.LayoutParams(
				ViewGroup.LayoutParams.FILL_PARENT, // 布局管理器宽度为屏幕宽度
				ViewGroup.LayoutParams.FILL_PARENT);// 布局管理器高度为屏幕高度
			layout.setBackgroundResource(R.drawable.background);// 设置背景图片
			for (int x = 0; x < this.titleData.length; x++) {
				TableRow row = new TableRow(this); 	// 定义表格行
				for (int y = 0; y < this.titleData[x].length; y++) {
					TextView text = new TextView(this);// 创建文本组件
					text.setText(this.titleData[x][y]); // 设置文本内容
					row.addView(text, y); 	// 增加组件
				}
				layout.addView(row); 			// 增加表格行
			}
			super.setContentView(layout, layoutParam); 		// 定义组件
		}

}

3.3 小结

(1)表格布局管理器使用TableRow控制表格行;

(2)表格布局的几个属性:

        定义伸缩列:android:shrinkColumns="3"

        设置不显示列:android:collapseColumns="0,3"

        增加背景图片:android:background="@drawable/mldn_logo"

(3)表格布局也可以使用Activity程序动态生成。

4. 相对布局管理器:RelativeLayout

4.1 知识点

(1)掌握相对布局管理器的主要特点及使用;

(2)可以使用Activity程序动态增加组件。

4.2 具体内容

相对布局管理器对于之前我们将的3种来说,用的会比较少,但是我们还是需要了解,相对布局就是以一个组件作为参照物,放在其上下左右,或者以其为对其方式的参考。

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是一个文本显示组件" />
    <Button
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是一个按钮" 
        android:layout_toRightOf="@+id/text"--放在text组件的右边
        android:layout_below="@+id/text"/>--放在text组件的下边
    <ImageView 
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:layout_toRightOf="@+id/text"—放在text组件的右边
        android:layout_above="@+id/but"—放在but组件的上边
        />
</RelativeLayout>

 以上的程序都是通过布局文件进行配置的,当然也可以通过程序控制相对布局管理器。

package com.example.relativelayoutproject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.RelativeLayout;

public class RelativeLayoutActivity extends Activity {
	private RelativeLayout layout = null;
	private Button but2 = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_relative_layout);
		this.layout = (RelativeLayout)super.findViewById(R.id.mylayout);
		this.but2 = new Button(this);
		this.but2.setText("我也是一个按钮");
		RelativeLayout.LayoutParams butParams = new RelativeLayout.LayoutParams(
				RelativeLayout.LayoutParams.WRAP_CONTENT,
				RelativeLayout.LayoutParams.WRAP_CONTENT);//准备组件布局参数
		butParams.addRule(RelativeLayout.LEFT_OF, R.id.img);//添加规则放在text组件的右边
		butParams.addRule(RelativeLayout.BELOW, R.id.text);//添加规则放在text组件的下边
		this.layout.addView(this.but2,butParams);//加入组件
	}
}

 4.3 小结

(1)相对布局管理器是以一个组件进行定位的参考;

(2)使用RelativeLayout和RelativeLayout.LayoutParams类可以在Activity程序中动态配置布局管理器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java elasticsearch 实现以图搜图效果

前言&#xff1a; 现在需要用javaelasticsearch的方式实现以图搜图的效果&#xff0c;根据下面的文章内容做了一点修改 相关文章&#xff1a;https://blog.csdn.net/m0_52640724/article/details/129357847 一、相关环境 java&#xff1a;jdk11 elasticsearch&#xff1a;7.17…

行情不好进阶困难?那是因为你没有选对方向

关注“软件测试藏经阁”微信公众号&#xff0c;回复暗号【软件测试】&#xff0c;即可获取氪肝整理的全套测试资源 IT行情彻底崩盘了&#xff1f; 相信凡是在抖音关注过互联网相关内容的同学&#xff0c;应该会经常听到这句话吧&#xff01;没错就是号称“某蛙之父”的那个人天…

【LeetCode】HOT 100(13)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

JavaScript中getElementById与querySelector区别

JavaScript中getElementById与querySelector区别 1、getElement(s)Byxxxx 的用法1.1 getElementById() 方法1.2 getElementsByClassName() 方法1.3 getElementsByTagName() 方法 2、querySelector() 和 querySelectorAll() 用法2.1 querySelector() 方法2.2 querySelectorAll()…

Big O示例与Python数据结构的Big O

在Big-O示例部分的第一部分&#xff0c;我们将介绍各种Big-O函数的各种迭代。 让我们从一些简单的例子开始&#xff0c;探索大O是什么。 O(1) Constant def func_constant(values):Prints first item in a list of values.print(values[0])func_constant([1,2,3])# 1请注意&a…

避雷器计数器测试仪

原理 图1所示为JS动作记数器的原理接线图。图1&#xff08;a&#xff09;为JS动作记数器的基本结构&#xff0c;即所谓的双阀片式结构。当避雷器动作时&#xff0c;放电电流流过阀片R1&#xff0c;在R1上的压降经阀片R2给电容器C充电&#xff0c;然后C再对电磁式记数器的电感线…

easyX基本概念(注释版)

0.前言 本次我给您带来easyX库系列的博文&#xff0c;本系列博文目的在于对原easyX库文档进行一个补充和注解&#xff0c;重在补充测试样例和实践。 easyX库本身并不值得过于学习&#xff0c;但是作为有C语言基础的C爱好者&#xff0c;学习easyX能让您对IT技术更加感兴趣。用…

AI完成音频创作,击败99%作者

使用AI完成音频创作 &#xff0c;击败99%同类创作者 &#xff0c;享受持续广告变现收益 &#xff0c;下面我们来看下如何使用把~ 音频生成和投放可以分为以下两步骤&#xff1a; 使用AI效能公众号完成内容创作&#xff1b;利用喜马拉雅云剪辑发布内容 1. 内容生成 打开AI效能公…

Altium Designer 15 (AD15)新建元件库

1. 连接线 1.1 设置连接线的默认颜色&#xff0c;宽度&#xff1a;点击图标 --》按Tab键 1.2 默认使用蓝色&#xff0c;通用 2. 调出来元件库&#xff0c;然后按照元件的英文名字搜元件&#xff0c;拖到左边画图区域就可以了 3. 自己画一个元器件&#xff0c;自定义元器件 3.1…

6.14 消息队列

目录 消息队列 消息队列结构 消息队列使用步骤 消息队列创建/打开-msgget 消息队列创建/打开 - 示例 消息发送 – msgsnd 消息格式 消息发送 - 示例 笔记 消息队列 消息队列是System V IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表。…

解决Idea中日志文件log4j.xml中http//jakarta.apache.org/log4j爆红,报错此 uri is not registered

在Idea中&#xff0c;配置log4j.xml出现“http //jakarta.apache.org/log4j/ uri is not registered”的错误信息&#xff0c;解决步骤如下&#xff1a; 1、原始的log4j.xml配置文件&#xff1a; <?xml version"1.0" encoding"GB2312" ?> <!…

ESP32(Micro Python)LVGL 四路ADC

本程序布局与上一个程序相同&#xff0c;引脚不重合&#xff0c;可以在不更换外设的情况下切换程序。由于仪表盘显示的数值范围不可调&#xff0c;实际显示的值为测量值占量程的百分比。 代码如下 import lvgl as lv import time from espidf import VSPI_HOST from ili9XX…

chatgpt赋能python:Python如何在输入之前等待30秒

Python如何在输入之前等待30秒 作为一名编程工程师&#xff0c;程序的性能和用户体验都是非常重要的。在用户输入数据之前等待一段时间可以帮助我们避免不必要的错误和提高程序的稳定性。本文将介绍如何使用Python等待30秒在输入数据。 使用Python的time模块 Python的time模…

【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (4) AI办公

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

SLAM实战项目(2) — ROS下运行ORB-SLAM2稠密地图重建

目录 1 运行步骤 (1) 创建工作空间 (2) 修改CmakeList.txt (3) 编译 (4) 下载bag文件 (4) 编写roslaunch文件 2 运行报错 报错1&#xff1a; 报错2&#xff1a; 报错3&#xff1a; 报错4&#xff1a; ROS学习文档&#xff1a;Introduction Autolabor-ROS机器人入门…

Bert模型精讲

1.Autoregressive语言模型与Autoencoder语言模型 1.1 语言模型概念介绍 Autoregressice语言模型&#xff1a;指的是依据前面(或后面)出现的单词来预测当前时刻的单词&#xff0c;代表有ElMo, GPT等。 Autoencoder语言模型&#xff1a;通过上下文信息来预测被mask的单词&…

Linux GCC,GDB,Shell脚本,Vim的简单使用

这里写目录标题 GCC命令GDB命令Shell脚本VIM指令 GCC命令 GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;是由GNU开发的编程语言译器 编译一个简单的.c程序&#xff1a; 四步分开写&#xff1a; gcc -E -o hello.i hello.c // 预处理 gcc -…

chatgpt赋能python:Python怎么绕过登录爬取数据

Python怎么绕过登录爬取数据 在进行网站爬取时&#xff0c;经常会发现需要登录才能访问所需要的数据&#xff0c;这给我们的爬虫程序带来了一定的难度。本文就介绍一些Python绕过登录的方法&#xff0c;让你获取到所需的数据。 1. Session维持登录状态 当我们登录一个网站时…

运维实践 | 运维打工人必备 CentOS-Linux/Stream-8 服务器系统基础安装与配置实践...

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

【LeetCode】python 主要元素 摩根投票法

目录 题目&#xff1a; 题解&#xff1a; 1.纯暴力&#xff08;字典&#xff09; 2. 摩根投票法 题目&#xff1a; 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组&#xff0c;找出其中的主要元素。若没有&#xff0c;返回 -1 。请设计时间复杂度为 O(N) 、空…